Pandas笔记3-导入excel文件

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容