1 本文适合读者
刚开始学习Pandas的新手
2 read_excel()方法和主要参数
read_excel方法通过调用xlrd模块可以读取Excel 2003 (.xls) and Excel 2007+ (.xlsx) 文件。
df = 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文件路径或URL
df = pd.read_excel('Excel_file.xlsx') #读入Excel文件
sheet_name :Excel文件的sheet表可以用shee_name(字符串形式)来表示,也可以用索引号(从0开始)表示,默认是0,也就是第一张sheet表
参数设为None,表示打开所有 sheet
如果用sheet表名称或者索引号打开会返回一个DataFrame对象;
如果用list或者None打开会返回一个包含DataFrame对象的字典。
df = pd.read_excel('Excel_file.xlsx', sheet_name=0) #打开第一张sheet
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2") #打开“Sheet2”这张表,注意名称大小写不要写错
header :使用哪一行(或几行)作列名,默认是0
header = 0 表示使用第一行作DataFrame的列名
header = None 表示没有列名
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", header = 0) #一般情况下都是使用第一行作列名
names :列名,如果excel数据没有列名,可以设成header = None,并通过传入列名列表来规定列名
如果excel数据有列名,但是你想用新的列名替换,则可以设成header=0
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", header = None, names=['month','fruit','count','price','amount']) #传入列名
index_col :指定哪一列作为行标签,第1列为0,默认为None
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2",index_col=0) #把第1列作为行标签
usecols :导入哪些列
默认是None,即导入所有列
设为数字n,表示导入从第1列到第n+1列,0表示导入第1列,1表示第1列和第2列,以此类推
设为数字列表,则导入指定的列
还可以用字母来表示要导入的列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=3) #导入第1-4列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=[0,2,4]) #导入第1列、第3列和第5列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A:C") #导入第1-3列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A,C") #导入第1列和第3列
dtype :列的数据类型,默认为None
整型用int表示,浮点型用float表示,不要写成int64和float64
这里dtype={'金额':str}也可以写成dtype={'金额':object}
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'销量':float}) #原本销量是整数,现在按浮点数导入
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金额':int}) #原本金额是浮点数,现在按整数导入
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金额':str}) #金额按字符串导入,类型变成了object
converters :这是一个数据类型转换器,可以在导入原始文件时将多个指定列的数据类型转换成其他类型,默认是None
该参数在设置时形式上是一个字典,“健”可以是代表列的整数值或者列标签名称,“值”是一个函数,用来转换数据类型
skiprows :在导入时要跳过的开头行数,索引从0开始
skiprows=1 #跳过第1行,从第2行开始导入
skiprows=2 #跳过第1-2行,从第3行开始导入
skiprows=[1,3] #跳过第2行和第4行,第3行保留
nrows : 指定要导入的行数,传入一个整数值,默认是None
na_values :除了下面默认的字符串以外,还要将哪些字符串作为空值来导入
例如excel文件内容:
fruit code
0 apple 100
1 banana 101
2 orange 102
3 coconut 103
df = pd.read_excel('fruit.xlsx',sheet_name="Sheet1",na_values=['apple','banana'])
结果
fruit code
0 NaN 100
1 NaN 101
2 orange 102
3 coconut 103
默认情况下,以下值(字符串)会被解析成NaN:
‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.
设置了na_values之后就会额外再增加会被解析成NaN的字符串
parse_dates :如果日期在Excel文件中是以字符串形式储存的,可以用parse_dates转换成datetime格式
keep_default_na :如果指定了na_values参数且keep_default_na=False,则默认的NaN值会被覆盖
verbose :布尔型,默认为False
指出非数值列的空值替换数量
thousands :千位分隔符,默认为None
千位分隔符用来将字符串类型的列转换成数值型
该参数仅用于读取Excel文件时那些以文本格式存储的列
skipfooter :要跳过的结尾行数,默认为0
convert_float :布尔型,默认为True
是否把整数型的浮点数转换成整数(即1.0 -> 1)
Excel在储存数值时都是按浮点数储存的,如果该参数为False,所有的数值都会按浮点型导入。
3 导入excel文件的常见问题
3.1 导入数字字符串变整数
有时候我们必须保留excel文件中的数字字符串,比如有前导0的电话区号、特殊编码等,pandas默认会把数字字符串直接按整数导入。
比如原始excel中的数据:
100123456789,beijing,010
200123456789,shanghai,021
300123456789,shenzhen,022
400123456789,guangzhou,023
500123456789,hangzhou,024
600123456789,nanjing,025
按默认方式导入,df1 = pd.read_excel('numeric.xlsx'),在pandas中可以看到,区号被自动识别为整数,数字前面的0被去掉了:
id city code
0 100123456789 beijing 10
1 200123456789 shanghai 21
2 300123456789 shenzhen 22
3 400123456789 guangzhou 23
4 500123456789 hangzhou 24
5 600123456789 nanjing 25
df1.dtypes
id int64
city object
code int64
为了保留原始的数字字符串的格式,我们可以指定dtype=str,来将原始数据按字符串格式导入:df2 = pd.read_excel('numeric.xlsx',dtype=str)
id city code
0 100123456789 beijing 010
1 200123456789 shanghai 021
2 300123456789 shenzhen 022
3 400123456789 guangzhou 023
4 500123456789 hangzhou 024
5 600123456789 nanjing 025
df2.dtypes
id object
city object
code object
网友评论