通过Pandas库可以从多种格式的数据文件中读取数据,也可以将处理后的数据写入到这些文件中。pandas库中的pd.read_excel()相较之前的xlrd库的读表操作更加简单,针对一般批量的数据处理选择pandas库操作是不错的选择。
一、读取Excel文件的函数
- 读取函数为:pd.read_excel(),函数的一些参数为:
pd.read_excel(io, sheet_name=0,header=0,skiprows=None,index_col=None,names=None,
arse_cols=None,date_parser=None,na_values=None,thousands=None,
convert_float=True,has_index_names=None,converters=None,dtype=None,
true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
二、读取函数的相关参数
io
- io指的是要读取的excel 文件存储路径.
- 可以是绝对路径,也可以是相对路径。
sheet_name
- sheet_name:sheet_name默认为0,即返回第一个工作表,返回多表使用sheet_name=[0,1]或sheet_name=["工作表1","工作表2"],若sheet_name= None是返回所有工作表 。
- 注意:int/string返回的是DataFrame,而None和list返回的是dict of DataFrame。
- 案例:
import pandas as pd
pd.read_excel("要打开的EXCEL文件.xlsx",
sheet_name = 1) # 读取EXCEL工作簿中的第二个工作表
pd.read_excel("要打开的EXCEL文件.xlsx",
sheet_name = “二月”) # 读取EXCEL工作簿中的工作表名为‘二月’的工作表
pd.read_excel("要打开的EXCEL文件.xlsx",
sheet_name =None ) # 读取EXCEL工作簿中的所有工作表,是一个表格的字典。
df_dict = pd.read_excel("要打开的EXCEL文件.xlsx",
sheet_name = [1,“二月”]) #读取EXCEL工作簿中的第二个工作表和表名为‘二月’的工作表
print(df_dict[1])
print(df_dict["二月"])
header
- header :指定作为列索引的行(即通常说的标题行),默认0,即取第一行,数据为列名行以下的数据;若数据不含标题行,则设定 header = None;
index_col
- index_col:指定作为行索引的列。
usecols
- usecols:指定只使用哪些列
-- None:全部(默认)
-- str:如:usecols = 'A,C:F' # 这里的A,C,F指的是EXCEL表中的A列等。
-- int-list:如:usecols = [0,2]
-- str-list:如:usecols = ['姓名','成绩']
-- lambda函数:如:lambda x: x == "姓名" - 建议使用str-list 方法。因为当EXCEL表结构发生变化时,易于代码维护。
skiprows
-
skiprows:省略指定行数的数据
import pandas as pd
pd.read_excel("要打开的EXCEL文件.xlsx",
skiprows = [0,2] ) # 跳过索引为0和2的两行,用列表形式表达。
names
names:指定使用的标题行列名列表,如果表格不包含标题行,则应显式传递header = None
dtype
dtype:是一个字典,表示方法{‘列名’:'类型'},用来设置列的数据类型。
- int8/int16/int32/int64(默认): 整型
- float16/float32/float64(默认):浮点型
- str/string: 字符串
- bool: 布尔型
- categort: 分类
- datetime64[ns]: 时间戳(纳秒)
- period[Y/M/D]: 时间周期(年/月/日)
- object: python对象混合类型
# 类型的查看
import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx")
df.dtypes # 查看读出数据的数据类型
在这里会发现,字符型数据被识别为 object 类型。需要注意的是不能把int64类型直接转化为str类型,这时可用下列代码进行转换:
df['列名'] = df['列名'].astype('string')
parse_dates
parse_dates:将表中的日期数据转化为日期类型,例如:
在这里就用到了一个转换,代码如下:
parse_dates = [0,1,2,3,4,5,6] # 将列索引为0,1,2,3,4,5,6列中的数据转换为日期类型
将多列数据拼接成一个日期格式类型,例如:
转换代码:
import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = [[0, 1, 2]])
以上代码中,不使用索引,使用列名也是可以的,即:
import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = [['年', '月', '日']])
还可以使用字典的形式,指定合并后列名,即:
import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = {'日期': ['年', '月', '日']})
date_parser
date_parse须与parse_dates配合使用,可将形如以下格式的数据转换为日期格式:
转换代码如下:
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
parse_dates = [0],
date_parser = lambda x: pd.to_datetime(
x,format = '%Y年%m月%d日'
)
) # 这里的 parse_dates = [0],用来指定要转换的列
na_values
na_values:识别为NaN(缺失值)的其他字符串。
- NaN意为 Not a Number <float>
- na_values基本用法:
-- na_values = 0
-- na_values = '空值'
-- na_values = ['空值',0]
-- na_values = {'列名': ['空值',0] }
小坑:如果单元格里有空格,读取后不会显示 NaN。
将单元格中的0替换为NaN
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
na_values = 0
)
将单元格中的字符串 ‘a' 替换为NaN
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
na_values = 'a'
)
用列表形式传入,将单元格中的指定值替换为NaN ,如:将单元格中的字符串’a‘,0和空格替换为 NaN
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
na_values = [ 'a',0,' ']
)
用字典形式传入,将指定列单元格中的指定值替换为NaN,如:
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
na_values = {'列名',[ 'a',0,' ']}
converters
converters:是一个值转换函数,默认为None,传入值为一个字典。如:
要去掉这些空格符号,就可使用converters进行转换:
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
converters ={
'货号': lambda x: x.strip()
}
)
# 也可不用lambda函数:
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
converters ={
'货号': str.strip
}
)
也可以用它来进行一些简单的计算,如:将所有的销量值都加上5
import pandas as pd
df = pd.read_excel(
"要打开的EXCEL文件.xlsx",
converters ={
'销量': lambda x: x + 5
}
)
今天就整理到这里,还有些参数比较简单。不笔记了。