pandas读取csv文件数据的方法及注意点

pandas是一个高效的数据分析工具。基于其高度抽象的数据结构DataFrame点击这里了解DataFrame数据结构),几乎可以对数据进行任何你想要的操作。

由于现实世界中数据源的格式非常多,pandas也支持了不同数据格式的导入方法,本文介绍pandas如何从csv文件中导入数据。

数据导入到pandas

从上图可以看出,我们要做的工作就是把存储在csv格式中的数据读入并转换成DataFrame格式。
pandas提供了一个非常简单的api函数来实现这个功能:read_csv()

1. 通过read_csv接口读入csv文件中的数据

下面是一个简单的示例:

import pandas as pd

CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))

只要简单地指定csv文件的路径,便可以得到DataFrame格式的数据df。对于理想情况下的数据,导入过程就是这么简单!

下面考虑这种情况:假设csv文件头部有几个无效行,那么打印出来的结果可能如下所示:

                      1          2      3       4
0             datetime       host    hit  volume
1  2018-07-24 09:00:00  weibo.com     20    1020
2  2018-07-25 09:00:00     qq.com  no 20    1028
3  2018-07-26 19:00:00   sina.com     25    1181
4  2018-07-27 21:00:00   sohu.com     15    4582

pandas把【1,2,3,4】这组无效数据当作了column name;而实际上,我们更偏向于将【datetime,host,hit,volume】这组数据当作column name。对于这种情况,read_csv()函数提供了一个参数:skiprows,用于指定跳过csv文件的头部的前几行。在这里,我们跳过1行即可。

import pandas as pd


CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH, skiprows=1)
print(df.head(5))

得到的结果如下所示:

              datetime       host    hit  volume
0  2018-07-24 09:00:00  weibo.com     20    1020
1  2018-07-25 09:00:00     qq.com  no 20    1028
2  2018-07-26 19:00:00   sina.com     25    1181
3  2018-07-27 21:00:00   sohu.com     15    4582

2. 处理csv文件中的无效数据

pandas可以自动推断每个column的数据类型,以方便后续对数据的处理。还以上文中的数据为例,通过如下代码:

import pandas as pd


CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))
print('datatype of column hit is: ' + str(df['hit'].dtypes))

得出的结果:


              datetime       host  hit  volume
0  2018-07-24 09:00:00  weibo.com   20    1020
1  2018-07-25 09:00:00     qq.com   20    1028
2  2018-07-26 19:00:00   sina.com   25    1181
3  2018-07-27 21:00:00   sohu.com   15    4582
datatype of column hit is: int64

pandas将hit这一列的数据类型判定为了int64,这显然方便未来我们对于该列数据的运算。
但是在实际情况中,我们经常会面临数据缺失的问题,如果出现这种情况,我们往往会用一些占位符来表达。假设,我们用missing这个占位符来表示数据缺失,仍使用上述代码,来探索下会发生些什么:

              datetime       host      hit   volume
0  2018-07-24 09:00:00  weibo.com       20     1020
1  2018-07-25 09:00:00     qq.com       20     1028
2  2018-07-26 19:00:00   sina.com  missing  missing
3  2018-07-27 21:00:00   sohu.com       15     4582
datatype of column hit is: object

由于hit这一列中出现了missing这个字符串,pandas将hit这一列的数据类型判断成了object。这会给我们对该列数据的运算带来影响。例如,假设我们要计算hit列前两行数据的和,代码如下:

print(df['hit'][0] + df['hit'][1])

结果是:

2020

本来我们想要的是数学运算结果,但得到的却是一个字符串拼接结果。这就是由于数据类型判断失误带来的严重影响。
对于这种情况,read_csv()函数也提供了一个简单的处理方式,只需要通过na_value参数指定占位符,pandas便会在读入数据的过程中自动将这些占位符转换成NaN,从而不影响pandas对column数据类型的正确判断。
示例代码:

import pandas as pd
  
  
CSV_FILE_PATH = './test.csv'
  
df = pd.read_csv(CSV_FILE_PATH, skiprows=0, na_values=['missing')
print(df.head(5))
print('datatype of column hit is: ' + str(df['hit'].dtypes))
print(df['hit'][0] + df['hit'][1])

运行结果如下:

              datetime       host   hit  volume
0  2018-07-24 09:00:00  weibo.com  20.0  1020.0
1  2018-07-25 09:00:00     qq.com  20.0  1028.0
2  2018-07-26 19:00:00   sina.com   NaN     NaN
3  2018-07-27 21:00:00   sohu.com  15.0  4582.0
datatype of column hit is: float64
40.0

可以看到,pandas将数据集中的missing单元全部转换为了NaN,并成功判断出hit这一列的数据类型。

3. 总结

通过一个简单的read_csv()函数,实际可以做到如下几件事:

  • 通过指定的文件路径,从本地读取csv文件,并将数据转换成DataFrame格式
  • 更正数据集的头部(column)
  • 正确处理缺失数据
  • 推断每一列的数据类型

当然,read_csv()函数还有一系列其他参数来应对各种情况,遇到具体问题的同学可参考其接口指南。

最后送大家一个支付宝红包😄

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

推荐阅读更多精彩内容