Python实例教程

Pandas笔记3-导入excel文件

2018-10-28  本文已影响0人  渐悟懂劲

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
上一篇下一篇

猜你喜欢

热点阅读