Pandas 处理 Excel 常用方法技巧
在使用 Pandas 前需要学习了解一下 Series 和 DataFrame 的基本数据结构和索引的相关概念,之后就可以练习基本的 Excel操作。Pandas 读取一个 Excel 文件后会将其转化为 DataFrame 对象,每一列或行就是一个 Series 对象。这里我们看下如何对一个 excel 进行读写,以及 Sheet、行列、表头处理的一些常用技巧。
读取 Excel¶
如果您想读取 Excel 表格中的数据,可以使用 read_excel()
方法,其语法格式如下:
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
usecols=None, squeeze=False,dtype=None, engine=None,
converters=None, true_values=None, false_values=None,
skiprows=None, nrows=None, na_values=None, parse_dates=False,
date_parser=None, thousands=None, comment=None, skipfooter=0,
convert_float=True, **kwds)
下表对常用参数做了说明:
参数名称 | 说明 |
---|---|
io | 表示 Excel 文件的存储路径。 |
sheet_name | 要读取的工作表名称,默认0,即读取第一个工作表作为 DataFrame(一定要加sheet_name=None ,才能读取出所有的 sheet,否则默认读取第一个 sheet)。 |
header | 指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置为 header=2,则表示将前两行作为多重索引。 |
names | 一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。 |
index_col | 用做行索引的列,可以是工作表的列名称,如 index_col = ‘列名’,也可以是整数或者列表。 |
usecols | int或list类型,默认为None,表示需要读取所有列。 |
squeeze | boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。 |
converters | 规定每一列的数据类型。 |
skiprows | 接受一个列表,表示跳过指定行数的数据,从头部第一行开始。 |
nrows | 需要读取的行数。 |
skipfooter | 接受一个列表,省略指定行数的数据,从尾部最后一行开始。 |
示例如下所示:
import pandas as pd
# 读取所有Sheet
df = pd.read_excel('example.xlsx', sheet_name=None)
# 读取第一个、第二个和名为"Sheet5"的工作表作为 DataFrame 的字典
df = pd.read_excel('example.xlsx', sheet_name=[0, 1, "Sheet5"])
获取行数和列数¶
import pandas as pd
df = pd.read_excel('example.xlsx')
# 行索引
print(df.index)
# RangeIndex(start=0, stop=3747, step=1)
# 输出元祖,分别为行数和列数,默认第一行是表头不算行数
print(df.shape)
# (3747, 4)
获取表头¶
read_excel
默认是把 excel 的第一行当成表头。注意:如果 read_excel
的 sheet_name=None
,读取的是所有 excel 的 sheet_name(key) 和 sheet_values(values) 组成的字典,df.keys()
的结果是所有 sheet_name,即名字(字典的键)。
获取第一个 sheet¶
这时候 df.keys()
和 df.columns
的结果是一样的,都是第一个 sheet 的表头。
import pandas as pd
df = pd.read_excel('input.xlsx')
print(df.keys())
print('---------------')
print(df.columns)
获取所有 sheet¶
import pandas as pd
# 参数为 None 代表读取所有 sheet
df = pd.read_excel('input.xlsx',sheet_name=None)
# 获取所有sheet名字, 如果read_excel参数不是None, 则df.keys()为表头
sheet_names = list(df.keys())
print(sheet_names)