Tengo un archivo de hoja de cálculo grande (.xlsx) que estoy procesando con los pandas de Python. Sucede que necesito datos de dos pestañas en ese archivo grande. Una de las pestañas tiene una tonelada de datos y la otra son solo unas pocas celdas cuadradas.
Cuando uso pd.read_excel () en cualquier hoja de trabajo, me parece que todo el archivo está cargado (no solo la hoja de trabajo que me interesa). Entonces, cuando uso el método dos veces (una para cada hoja), efectivamente tengo que sufrir que todo el libro se lea dos veces (aunque solo usemos la hoja especificada).
¿Lo estoy usando mal o solo está limitado de esta manera?
¡Gracias!
Respuestas:
Prueba
pd.ExcelFile
:Como señaló @HaPsantran, todo el archivo de Excel se lee durante la
ExcelFile()
llamada (no parece haber una forma de evitarlo ). Esto simplemente le ahorra tener que leer el mismo archivo cada vez que desea acceder a una nueva hoja.Tenga en cuenta que el
sheet_name
argumentopd.read_excel()
puede ser el nombre de la hoja (como arriba), un número entero que especifica el número de hoja (por ejemplo, 0, 1, etc.), una lista de nombres o índices de hoja, oNone
. Si se proporciona una lista, devuelve un diccionario donde las claves son los nombres / índices de la hoja y los valores son los marcos de datos. El valor predeterminado es simplemente devolver la primera hoja (es decir,sheet_name=0
).Si
None
se especifica, todas las hojas se devuelven, como un{sheet_name:dataframe}
diccionario.fuente
sheet_name
y nosheetname
. No me di cuenta de que era la parte en desuso, porque todavía estaba trabajando en el método read_excel, pero no en el método de análisis.Hay 3 opciones:
Lea todas las hojas directamente en un diccionario ordenado.
Gracias @ihightower por señalarlo y @toto_tico por señalar el problema de la versión.
Lea la primera hoja directamente en el marco de datos
Lea el archivo de Excel y obtenga una lista de hojas. Luego elija y cargue las sábanas.
Lea todas las hojas y guárdelas en un diccionario. Igual que el primero pero más explícito.
Actualización: Gracias @toto_tico por señalar el problema de la versión.
fuente
df_sheet_map = pd.read_excel(file_fullpath, sheetname=None)
, esto tendrá las hojas en un diccionario automáticamente ... y accederá a la hoja como un marco de datos como este:df_sheet_map['house']
También puede usar el índice para la hoja:
le dará la primera hoja de trabajo. para la segunda hoja de trabajo:
fuente
También puede especificar el nombre de la hoja como parámetro:
cargará solo la hoja
"sheet_name"
.fuente
de manera predeterminada, lea la primera hoja de trabajo.
lea la hoja específica del libro de trabajo y
lea todas las hojas de trabajo desde Excel hasta el marco de datos de pandas como un tipo de OrderedDict significa marcos de datos anidados, todas las hojas de trabajo como marcos de datos recopilados dentro del marco de datos y su tipo es OrderedDict.
fuente
Sí, desafortunadamente siempre cargará el archivo completo. Si está haciendo esto repetidamente, probablemente sea mejor extraer las hojas para separar los CSV y luego cargarlas por separado. Puede automatizar ese proceso con d6tstack que también agrega características adicionales como verificar si todas las columnas son iguales en todas las hojas o en varios archivos de Excel.
Ver ejemplos de Excel d6tstack
fuente
Si ha guardado el archivo de Excel en la misma carpeta que su programa Python (direccionamiento relativo), entonces solo necesita mencionar el número de hoja junto con el nombre del archivo. Sintaxis = pd.read_excel (Nombre de archivo, SheetNo) Ejemplo:
fuente