50_Pandas读取 Excel 文件 (xlsx, xls)

50_Pandas读取 Excel 文件 (xlsx, xls)

要使用 pandas 将 Excel 文件(扩展名:.xlsx、.xls)作为 pandas.DataFrame 读取,请使用 pandas.read_excel () 函数。

这里,将描述以下内容。

  • openpyxl、xlrd的安装
  • pandas.read_excel()的基本用法
  • 通过编号/工作表名称指定要读取的工作表:参数 sheet_name
  • 读取一张Sheet
  • 读取多张Sheet
  • 加载所有Sheet
  • 指定标头、索引:参数header、index_col
  • 指定要读取的列和不读取的行:参数 usecols、skirows、skipfooter
  • 以下面的 xlsx 文件为例。

    sheet1

            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33
    

    sheet2

            AA  BB  CC
    ONE     11  12  13
    TWO     21  22  23
    THREE   31  32  33
    

    openpyxl、xlrd的安装

    pandas.read_excel () 在内部使用名为 openpyxl 和 xlrd 的库。

    openpyxl 和 xlrd 是在 Python 中读取和写入 Excel 文件(.xlsx、.xls)的库。

    openpyxl 和 xlrd 都可以用 pip 安装。

    $ pip install openpyxl
    $ pip install xlrd
    

    pandas.read_excel()的基本用法

    在第一个参数 io 中指定 Excel 文件的路径或 URL。 如果您有多个工作表,则只有第一个工作表将作为 pandas.DataFrame 加载。

    import pandas as pd
    
    print(pd.__version__)
    # 1.2.2
    
    df = pd.read_excel('./data/sample.xlsx', index_col=0)
    print(df)
    #         A   B   C
    # one    11  12  13
    # two    21  22  23
    # three  31  32  33
    
    print(type(df))
    # <class 'pandas.core.frame.DataFrame'>
    

    Index_col = 0 设置为使第一列索引。稍后将描述细节。 该示例读取 .xlsx 文件(Excel2007 之后的 Excel 文件),但同样适用于 .xls 文件(Excel97-2003 的 Excel 文件)。

    通过编号/工作表名称指定要读取的工作表:参数 sheet_name

    读取一张Sheet

    要读取的工作表可以由参数 sheet_name 指定。通过以 0 开头的数字或工作表名称指定。

    df_sheet_index = pd.read_excel('./data/sample.xlsx', sheet_name=0, index_col=0)
    print(df_sheet_index)
    #         A   B   C
    # one    11  12  13
    # two    21  22  23
    # three  31  32  33
    
    df_sheet_name = pd.read_excel('./data/sample.xlsx', sheet_name='sheet2', index_col=0)
    print(df_sheet_name)
    #        AA  BB  CC
    # ONE    11  12  13
    # TWO    21  22  23
    # THREE  31  32  33
    

    读取多张Sheet

    也可以在参数 sheet_name 中指定一个列表。您可以使用起始编号或工作表名称。 指定的数字或工作表名称被读取为键 key,该工作表的数据 pandas.DataFrame 被读取为值为 value 的字典 dict。

    df_sheet_multi = pd.read_excel('./data/sample.xlsx', sheet_name=[0, 'sheet2'], index_col=0)
    print(type(df_sheet_multi))
    # <class 'dict'>
    
    print(len(df_sheet_multi))
    # 2
    
    print(df_sheet_multi.keys())
    # dict_keys([0, 'sheet2'])
    

    读取时由数字指定的工作表的键是数字,由工作表名称指定的工作表的键是工作表名称。

    print(df_sheet_multi[0])
    #         A   B   C
    # one    11  12  13
    # two    21  22  23
    # three  31  32  33
    
    print(type(df_sheet_multi[0]))
    # <class 'pandas.core.frame.DataFrame'>
    
    print(df_sheet_multi['sheet2'])
    #        AA  BB  CC
    # ONE    11  12  13
    # TWO    21  22  23
    # THREE  31  32  33
    
    print(type(df_sheet_multi['sheet2']))
    # <class 'pandas.core.frame.DataFrame'>
    

    加载所有Sheet

    如果设置了参数 sheet_name = None,则将读取所有工作表。

    df_sheet_all = pd.read_excel('./data/sample.xlsx', sheet_name=None, index_col=0)
    print(type(df_sheet_all))
    # <class 'dict'>
    
    print(df_sheet_all.keys())
    # dict_keys(['sheet1', 'sheet2'])
    

    指定标头、索引:参数header、index_col

    要指定用作标题(pandas.DataFrame 的列名列)和索引(pandas.DataFrame 的行名索引)的行或列,请将行号/列号以 0 开头分别传递给参数 header 和 index_col。

    如果 header 和 index_col 设置为 None,特定的行和列将不会用于 headers 和索引,它们将是从 0 开始的序列号。

    df_header_index = pd.read_excel('./data/sample.xlsx', header=None, index_col=None)
    print(df_header_index)
    #        0   1   2   3
    # 0    NaN   A   B   C
    # 1    one  11  12  13
    # 2    two  21  22  23
    # 3  three  31  32  33
    
    print(df_header_index.columns)
    # Int64Index([0, 1, 2, 3], dtype='int64')
    
    print(df_header_index.index)
    # RangeIndex(start=0, stop=4, step=1)
    

    默认为 header = 0(= 第一行是列),index_col = None(= 没有指定列作为索引)。

    df_default = pd.read_excel('./data/sample.xlsx')
    print(df_default)
    #   Unnamed: 0   A   B   C
    # 0        one  11  12  13
    # 1        two  21  22  23
    # 2      three  31  32  33
    
    print(df_default.columns)
    # Index(['Unnamed: 0', 'A', 'B', 'C'], dtype='object')
    
    print(df_default.index)
    # RangeIndex(start=0, stop=3, step=1)
    

    如果pandas的版本比较旧,如果header中指定的行的第一个元素是NaN,即使默认也使用第一列作为索引(index_col = None)(源码未确认,所以不知道是什么类型的)处理它是。)。 如果要将第一列设置为索引,可以显式设置 index_col = 0 ,任何版本都可以放心。

    print(pd.read_excel('./data/sample.xlsx', index_col=0))
    #         A   B   C
    # one    11  12  13
    # two    21  22  23
    # three  31  32  33
    

    也可以在参数名称中指定任何列名称列,如在读取 csv 文件的 read_csv () 中。有关详细信息,请参阅以下文章。

  • 03_Pandas读取csv/tsv文件(read_csv,read_table)
  • 指定要读取的列和不读取的行:参数 usecols、skirows、skipfooter

    如果不需要读取所有行/列,您可以指定读取哪些列和不读取哪些行。

    在参数 usecols 中传递要读取的列号列表,在参数 skiprows 中传递要跳过(未读取)的行号列表,在参数 skipfooter 中传递要跳过(未读取)的最后行数。

    df_use_skip = pd.read_excel('./data/sample.xlsx', index_col=0,
                                usecols=[0, 1, 3], skiprows=[1], skipfooter=1)
    print(df_use_skip)
    #       A   C
    # two  21  23
    

    当然,也可以在读取时不处理行列,全部读取后删除行列或引用任意位置的元素。

  • 04_Pandas获取和修改任意位置的值(at,iat,loc,iloc)
  • 12_Pandas.DataFrame删除指定行和列(drop)
  • 来源:饺子大人

    物联沃分享整理
    物联沃-IOTWORD物联网 » 50_Pandas读取 Excel 文件 (xlsx, xls)

    发表评论