50_Pandas读取 Excel 文件 (xlsx, xls)
Posted 饺子大人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 () 中。有关详细信息,请参阅以下文章。
指定要读取的列和不读取的行:参数 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
当然,也可以在读取时不处理行列,全部读取后删除行列或引用任意位置的元素。
以上是关于50_Pandas读取 Excel 文件 (xlsx, xls)的主要内容,如果未能解决你的问题,请参考以下文章