pandas.read_excel#
- pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, usecols=None, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_format=None, thousands=None, decimal='.', comment=None, skipfooter=0, storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)[源代码][源代码]#
将一个 Excel 文件读取到一个
pandasDataFrame中。支持从本地文件系统或URL读取 xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件扩展名。支持读取单个工作表或工作表列表的选项。
- 参数:
- iostr, ExcelFile, xlrd.Book, 路径对象, 或类文件对象
任何有效的字符串路径都是可接受的。字符串可以是一个URL。有效的URL方案包括http、ftp、s3和file。对于文件URL,需要一个主机。一个本地文件可以是:
file://localhost/path/to/table.xlsx。如果你想传递一个路径对象,pandas 接受任何
os.PathLike。文件类对象,我们指的是具有
read()方法的对象,例如文件句柄(例如通过内置的open函数)或StringIO。自 2.1.0 版本弃用: 传递字节字符串已被弃用。要从字节字符串读取,请将其包装在
BytesIO对象中。- sheet_namestr, int, list, 或 None, 默认 0
字符串用于工作表名称。整数用于零索引的工作表位置(图表工作表不计为工作表位置)。字符串/整数列表用于请求多个工作表。指定
None以获取所有工作表。可用案例:
默认为
0:第1个表格作为 DataFrame1: 作为 DataFrame 的第二张表"Sheet1": 加载名为 “Sheet1” 的工作表[0, 1, "Sheet5"]: 加载第一个、第二个和名为 “Sheet5” 的工作表作为 DataFrame 的字典None: 所有工作表。
- 标题int, 整数列表, 默认值 0
用于解析的 DataFrame 的列标签的行(从 0 开始索引)。如果传递了一个整数列表,这些行位置将组合成一个
MultiIndex。如果没有标题,请使用 None。- 名称类数组,默认无
要使用的列名列表。如果文件不包含标题行,则应显式传递 header=None。
- index_colint, str, 整数列表, 默认 None
列(从0开始索引)用作DataFrame的行标签。如果没有这样的列,则传递None。如果传递一个列表,这些列将组合成一个``MultiIndex``。如果使用``usecols``选择数据子集,index_col基于该子集。
缺失值将被向前填充,以允许与
merged_cells=True的to_excel进行往返操作。为了避免向前填充缺失值,请在读取数据后使用set_index而不是index_col。- usecolsstr, 类似列表的, 或可调用的, 默认 None
如果为 None,则解析所有列。
如果是字符串,则表示以逗号分隔的 Excel 列字母和列范围(例如 “A:E” 或 “A,C,E:F”)。范围包括两端。
如果是整数列表,则表示要解析的列号列表(从0开始索引)。
如果是字符串列表,则表示要解析的列名列表。
如果是可调用的,那么针对每个列名进行评估,如果可调用对象返回
True,则解析该列。
根据上述行为返回列的子集。
- dtype类型名称或列 -> 类型的字典,默认为 None
数据的类型或列的类型。例如:{‘a’: np.float64, ‘b’: np.int32} 使用
object以保留数据在Excel中的存储方式,不解释数据类型,这必然会导致object数据类型。如果指定了转换器,它们将代替数据类型转换应用。如果你使用None,它将根据数据推断每列的数据类型。- 引擎{‘openpyxl’, ‘calamine’, ‘odf’, ‘pyxlsb’, ‘xlrd’}, 默认 None
如果 io 不是一个缓冲区或路径,这必须被设置以识别 io。引擎兼容性:
openpyxl支持较新的 Excel 文件格式。calamine支持 Excel (.xls, .xlsx, .xlsm, .xlsb) 和 OpenDocument (.ods) 文件格式。odf支持 OpenDocument 文件格式 (.odf, .ods, .odt)。pyxlsb支持二进制 Excel 文件。xlrd支持旧式 Excel 文件 (.xls)。
当
engine=None时,将使用以下逻辑来确定引擎:如果
path_or_buffer是 OpenDocument 格式(.odf, .ods, .odt),那么将使用 odf。否则,如果
path_or_buffer是 xls 格式,将使用xlrd。否则,如果
path_or_buffer是 xlsb 格式,将使用pyxlsb。否则将使用
openpyxl。
- 转换器字典, 默认为 None
用于转换某些列中值的函数字典。键可以是整数或列标签,值是接受一个输入参数(Excel 单元格内容)并返回转换后内容的函数。
- true_values列表,默认为无
视为 True 的值。
- false_values列表,默认为无
视为 False 的值。
- skiprows列表式、整数或可调用对象,可选
文件开头要跳过的行号(从0开始索引)或要跳过的行数(整数)。如果是一个可调用对象,该可调用函数将对行索引进行评估,如果该行应被跳过则返回 True,否则返回 False。一个有效的可调用参数示例是
lambda x: x in [0, 2]。- nrowsint, 默认为 None
要解析的行数。
- na_values标量、字符串、类列表或字典,默认无
额外的字符串识别为 NA/NaN。如果传递的是字典,则为每列指定 NA 值。默认情况下,以下值被解释为 NaN:’’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘None’, ‘n/a’, ‘nan’, ‘null’。
- keep_default_na布尔值, 默认为 True
在解析数据时是否包含默认的 NaN 值。根据是否传递
na_values,行为如下:如果
keep_default_na为 True,并且指定了na_values,则na_values将被附加到用于解析的默认 NaN 值中。如果
keep_default_na为 True,且na_values未指定,则仅使用默认的 NaN 值进行解析。如果
keep_default_na为 False,并且指定了na_values,则仅使用指定的na_values的 NaN 值进行解析。如果
keep_default_na为 False,并且na_values未指定,则不会将任何字符串解析为 NaN。
请注意,如果 na_filter 作为 False 传递,
keep_default_na和na_values参数将被忽略。- na_filter布尔值, 默认为 True
检测缺失值标记(空字符串和 na_values 的值)。在没有 NAs 的数据中,传递
na_filter=False可以提高读取大文件的性能。- 详细布尔值, 默认为 False
指示放置在非数字列中的 NA 值的数量。
- parse_dates布尔值、类列表或字典,默认 False
行为如下:
bool。如果为真 -> 尝试解析索引。list的整数或名称。例如,如果 [1, 2, 3] -> 尝试将第1、2、3列分别解析为单独的日期列。list的列表。例如,如果 [[1, 3]] -> 合并第1列和第3列,并解析为一个单独的日期列。dict,例如 {‘foo’ : [1, 3]} -> 将第1、3列解析为日期并调用结果为 ‘foo’
如果列或索引包含一个无法解析的日期,整个列或索引将以对象数据类型原样返回。如果你不想将某些单元格解析为日期,只需在Excel中将它们的类型更改为“文本”。对于非标准日期时间解析,请在
pd.read_excel之后使用pd.to_datetime。注意:对于 iso8601 格式的日期,存在一个快速路径。
- date_format : str 或 列 -> 格式的字典, 默认
Nonestr 或 列 -> 格式 的字典, 默认 如果在使用
parse_dates时使用,将根据此格式解析日期。对于更复杂的情况,请以object形式读入,然后根据需要应用to_datetime()。Added in version 2.0.0.
- thousandsstr, 默认为 None
用于将字符串列解析为数字的千位分隔符。请注意,此参数仅对在Excel中存储为文本的列是必要的,任何数字列将自动解析,无论显示格式如何。
- decimalstr, 默认 ‘.’
用于将字符串列解析为数字的小数点字符。请注意,此参数仅对在Excel中存储为文本的列是必要的,任何数字列将自动解析,无论显示格式如何(例如,使用 ‘,’ 表示欧洲数据)。
Added in version 1.4.0.
- 评论str, 默认为 None
注释掉该行的剩余部分。传递一个或多个字符给这个参数,以指示输入文件中的注释。注释字符串和当前行末尾之间的任何数据都将被忽略。
- skipfooterint, 默认 0
要跳过的末尾行数(0索引)。
- storage_options字典, 可选
对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于HTTP(S) URL,键值对会作为头选项转发到
urllib.request.Request。对于其他URL(例如以“s3://”和“gcs://”开头),键值对会转发到fsspec.open。请参阅fsspec和urllib获取更多详细信息,关于存储选项的更多示例请参考 这里。- dtype_backend{‘numpy_nullable’, ‘pyarrow’}
应用于结果
DataFrame的后端数据类型(仍在实验中)。如果未指定,默认行为是不使用可为空的数据类型。如果指定,行为如下:"numpy_nullable": 返回支持可空数据类型的DataFrame"pyarrow": 返回支持 pyarrow 的可空ArrowDtypeDataFrame
Added in version 2.0.
- engine_kwargs字典, 可选
传递给 excel 引擎的任意关键字参数。
- 返回:
- DataFrame 或 DataFrames 的字典
从传入的 Excel 文件生成的 DataFrame。有关何时返回 DataFrame 字典的更多信息,请参见 sheet_name 参数中的注释。
参见
DataFrame.to_excel将 DataFrame 写入 Excel 文件。
DataFrame.to_csv将 DataFrame 写入逗号分隔值(csv)文件。
read_csv将逗号分隔值(csv)文件读取到 DataFrame 中。
read_fwf将固定宽度格式化的行读取到 DataFrame 中。
备注
有关每个Excel引擎使用的方法的特定信息,请参阅pandas 用户指南
例子
可以使用文件名作为字符串或打开的文件对象来读取文件:
>>> pd.read_excel('tmp.xlsx', index_col=0) Name Value 0 string1 1 1 string2 2 2 #Comment 3
>>> pd.read_excel(open('tmp.xlsx', 'rb'), ... sheet_name='Sheet3') Unnamed: 0 Name Value 0 0 string1 1 1 1 string2 2 2 2 #Comment 3
可以通过 index_col 和 header 参数指定索引和标题。
>>> pd.read_excel('tmp.xlsx', index_col=None, header=None) 0 1 2 0 NaN Name Value 1 0.0 string1 1 2 1.0 string2 2 3 2.0 #Comment 3
列类型是推断的,但可以显式指定
>>> pd.read_excel('tmp.xlsx', index_col=0, ... dtype={'Name': str, 'Value': float}) Name Value 0 string1 1.0 1 string2 2.0 2 #Comment 3.0
True、False 和 NA 值,以及千位分隔符有默认值,但也可以明确指定。提供你想要的值作为字符串或字符串列表!
>>> pd.read_excel('tmp.xlsx', index_col=0, ... na_values=['string1', 'string2']) Name Value 0 NaN 1 1 NaN 2 2 #Comment 3
在excel输入文件中的注释行可以使用
commentkwarg 跳过。>>> pd.read_excel('tmp.xlsx', index_col=0, comment='#') Name Value 0 string1 1.0 1 string2 2.0 2 None NaN