Tengo un gran archivo de hoja de cálculo (.xlsx) que estoy de procesamiento usando python pandas. Lo que ocurre es que necesito los datos de dos fichas en que archivo de gran tamaño. Una de las fichas tiene un montón de datos, y la otra está a sólo unos pocos metros de las células.

Cuando yo uso pd.read_excel() en cualquier hoja de cálculo, a mí me parece que todo el archivo es cargado (no sólo de la hoja de cálculo que me interesa). Así que cuando puedo usar el método de dos veces (una vez para cada hoja), de hecho tienen que sufrir todo el libro se lee en dos veces (a pesar de que estamos utilizando sólo el especificado hoja).

Estoy utilizando mal o es sólo limitado de esta manera?

Gracias!

InformationsquelleAutor HaPsantran | 2014-10-23

6 Comentarios

  1. 149

    Intentar pd.ExcelFile:

    xls = pd.ExcelFile('path_to_file.xls')
    df1 = pd.read_excel(xls, 'Sheet1')
    df2 = pd.read_excel(xls, 'Sheet2')

    Como se nota por @HaPsantran, todo el archivo de Excel se lee durante la ExcelFile() llamada (no parece ser una forma de evitar esto). Esto sólo te ahorra tener que leer el mismo archivo en cada vez que desee acceder a una nueva hoja.

    Tenga en cuenta que el sheet_name argumento para pd.read_excel() puede ser el nombre de la hoja (como arriba), un entero que especifica el número de hoja (por ejemplo 0, 1, etc), una lista de los nombres de las hojas o de los índices o None. Si se proporciona una lista, devuelve un diccionario, donde las claves son los nombres de hoja/índices y los valores son los marcos de datos. El valor predeterminado es simplemente volver a la primera hoja (es decir, sheet_name=0).

    Si None se especifica, todos hojas son devueltas, como un {sheet_name:dataframe} diccionario.

    • FWIW, parece que (la última vez lo he comprobado) la primera línea de carga en todo, así que no hay manera eficiente de extracción en una sola hoja, pero al menos poner varias hojas no requiere de múltiples cargas de la hoja entera.
    • Esta respuesta ha sido despreciada por los pandas y ahora se bloquea para mí en v0.21.0. Debería ser sustituido por el que se da por @Mat0kan.
    • Esto todavía funciona muy bien para mí y no veo ninguna indicación del código o de la documentación que este está en desuso. Si usted está teniendo problemas con ella, me gustaría presentar un problema en el github para pandas o xlrd (python excel biblioteca de análisis utilizados por los pandas)
    • gracias me veían en esto un poco más y tienes razón, que aún funciona como el tiempo que yo uso sheet_name y no sheetname. No me di cuenta de que era el obsoleto parte, porque todavía estaba trabajando en la read_excel método, pero no en el método parse.
    • De hecho, una buena respuesta. Es allí una manera de encontrar la celda activa de la hoja de excel que usted lee?
    • No estoy seguro de cómo hacer esto. Tal vez crear una nueva pregunta?
    • Esto proporciona una enorme ahorro de tiempo si usted está leyendo varias hojas de un libro. Afeitado horas fuera de mi script. Gracias!
    • Fue realmente útil. Gracias !!

  2. 66

    Hay 3 opciones:

    1. Leer la primera hoja directamente en dataframe
    2. Leer el archivo de excel y obtener una lista de las hojas. Entonces eligió y de carga de las hojas.
    3. Leer todas las hojas y guárdelo en un diccionario.

    Ejemplo De Código:

    import pandas as pd
    
    df = pd.read_excel('excel_file_path.xls')
    # this will read the first sheet into df
    
    xls = pd.ExcelFile('excel_file_path.xls')
    
    # Now you can list all sheets in the file
    xls.sheet_names
    # ['house', 'house_extra', ...]
    
    # to read just one sheet to dataframe:
    df = pd.read_excel(file_name, sheetname="house")
    
    # to read all sheets to a map
    sheet_to_df_map = {}
    for sheet_name in xls.sheet_names:
        sheet_to_df_map[sheet_name] = xls.parse(sheet_name)

    Actualización:

    # @ihightower pointed out in the comments that all sheets can be 
    # directly read into an ordered dictionary in 1 step
    
    # for pandas version >= 0.21.0
    sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)
    
    # for pandas version < 0.21.0
    sheet_to_df_map = pd.read_excel(file_name, sheetname=None)

    Actualización 2: Gracias @toto_tico para señalarla.

    nombre de la hoja : string, int, mezclado lista de cadenas/ints, o Ninguno, por defecto 0
    En desuso desde la versión 0.21.0: Uso sheet_name lugar El Enlace De La Fuente

    • en última pandas que tengo(0.20.3), para leer todas las hojas a un mapa.. todo lo que se requiere es df_sheet_map = pd.read_excel(file_fullpath, sheetname=None), este tendrá las hojas en un diccionario automáticamente.. y acceso a la hoja como dataframe como este: df_sheet_map['house']
  3. 26

    También puede utilizar el índice de la hoja:

    xls = pd.ExcelFile('path_to_file.xls')
    sheet1 = xls.parse(0)

    dará la primera hoja de cálculo. para la segunda hoja de cálculo:

    sheet2 = xls.parse(1)
    • En caso de que desea una lista de los nombres de hoja, que sólo tipo xls.sheet_names
  4. 22

    También puede especificar el nombre de la hoja como un parámetro:

    data_file = pd.read_excel('path_to_file.xls', sheetname="sheet_name")

    se carga solo la hoja «sheet_name»

  5. 3
    pd.read_excel('filename.xlsx') 

    por defecto de leer la primera hoja del libro de trabajo.

    pd.read_excel('filename.xlsx', sheet_name = 'sheetname') 

    leer la hoja de libro y

    pd.read_excel('filename.xlsx', sheet_name = None) 

    leer todas las hojas de cálculo de excel a los pandas dataframe como un tipo de OrderedDict significa anidada dataframes, todas las hojas de cálculo como dataframes recogida dentro de dataframe y del tipo de OrderedDict.

  6. 1

    Sí lamentablemente siempre va a cargar el archivo completo. Si usted está haciendo esto varias veces, probablemente, el mejor extracto de las hojas para separar Csv y, a continuación, cargar por separado. Usted puede automatizar este proceso con d6tstack que también añade características adicionales, como la comprobación de si todas las columnas son iguales en todas las hojas o varios archivos de Excel.

    import d6tstack
    c = d6tstack.convert_xls.XLStoCSVMultiSheet('multisheet.xlsx')
    c.convert_all() # ['multisheet-Sheet1.csv','multisheet-Sheet2.csv']

    Ver d6tstack Excel ejemplos

Dejar respuesta

Please enter your comment!
Please enter your name here