Pandas文本操作之读取操作

一曲冷凌霜 提交于 2020-02-04 09:10:16

读写文本格式的数据

pandas中的解析函数
函数 说明
read_csv 从文件、url、文件型对象中加载带分隔符的数据,默认分隔符为逗号
read_table 从文件、url、文件型对象中加载带分隔符的数据,默认分隔符为制表符('\t')
read_fwf 读取定宽列格式数据
read_clipboard 读取剪贴板的数据,将网页转为表格时很有用
import pandas as pd
pd.read_csv('1.csv')

    a   b   c   d   message
0   1   2   3   4   hello
1   5   6   7   8   world
2   9   10  11  12  foo

# 如果没有列,就指定为None,会自动生成默认的列
pd.read_csv('2.csv',header=None)

    0   1   2   3   4
0   1   2   3   4   hello
1   5   6   7   8   world
2   9   10  11  12  foo

# 或者你可以用namse指定列明,但是行索引呢?
pd.read_csv('2.csv',names=['new_1','new_2','new_3','message'])

   new_1    new_2   new_3   message
1   2   3   4   hello
5   6   7   8   world
9   10  11  12  foo

# 你可以指定message为行索引,但是需要重新加入一个列名,否则会报错
names=['new_1','new_2','new_3','new_4','message']
pd.read_csv('2.csv',names=names,index_col='message')

     new_1  new_2   new_3   new_4
message             
hello   1   2   3   4
world   5   6   7   8
foo 9   10  11  12

# 也可以用索引直接指定第4列为行索引,不会报错,但是列标题会依然用message
pd.read_csv('2.csv',names=['new_1','new_2','new_3','message'],index_col=4)

    new_1   new_2   new_3   message
hello   1   2   3   4
world   5   6   7   8
foo 9   10  11  12

# 层次化索引的行索引,只要把索引名字放入列表中
pd.read_csv('3.csv',index_col=['key1','key2'])

    new1    new2    new3    new4    message
key1    key2                    
one a   1   2   3   4   hello
b   5   6   7   8   world
two c   9   10  11  12  foo
d   12  15  12  45  hel

# 有些表格可能不是用固定的分隔符去分隔字段,比如用不固定长度的空格,那么可以用正则来匹配,作为分隔符
list(open('4.csv'))
['key1 key2 new1 new2 new3 new4 message\n',
 'one a 1   2 3 4 hello\n',
 'one b 5   6 7 8 world\n',
 'two  c 9 10 11 12 foo\n',
 'two d 12 15 12 45  hel']
 # 正则匹配
pd.read_table('4.csv',index_col=['key1','key2'],sep='\s+')

    new1    new2    new3    new4    message
key1    key2                    
one a   1   2   3   4   hello
b   5   6   7   8   world
two c   9   10  11  12  foo
d   12  15  12  45  hel

# 你可以用skiprows跳过文件的第二行,第三行
pd.read_table('4.csv',index_col=['key1','key2'],sep='\s+',skiprows=[2,3])

    new1    new2    new3    new4    message
key1    key2                    
one a   1   2   3   4   hello
two d   12  15  12  45  hel

# 缺失值的处理,表示专门的缺失值
result = pd.read_csv('4.csv',index_col=['key1','key2'],sep='\s+')
result

    new1    new2    new3    new4    message
key1    key2                    
one a   1   2   3   4   hello
    b   5   6   8   world   NaN
two c   9   10  11  12  NaN
    d   12  12  45  hel NaN

# 查看是否缺失,返回布尔值
pd.isnull(result)

    new1    new2    new3    new4    message
key1    key2                    
one a   False   False   False   False   False
    b   False   False   False   False   True
two c   False   False   False   False   True
    d   False   False   False   False   True

# 指定为缺失值,我感觉这个有毒,还可以用字典为各列指定不同的NA值,na_values里必须是一个列表
result = pd.read_csv('4.csv',index_col=['key1','key2'],sep='\s+',na_values=[9,10])
result

    new1    new2    new3    new4    message
key1    key2                    
one a   1.0 2.0 3   4   hello
    b   5.0 6.0 8   world   NaN
two c   NaN NaN 11  12  NaN
    d   12.0    12.0    45  hel NaN
逐块读取文本文件

在处理很大的文件时,你可能只想取出一小部分或者逐块的迭代读取

result = pd.read_table('comments.csv',sep=',')
result.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12023 entries, 0 to 12022
Data columns (total 10 columns):
id               12023 non-null int64
name             12023 non-null object
content          12022 non-null object
today_time       12023 non-null object
fordearmetype    12023 non-null object
appenddays       12023 non-null int64
appendtime       735 non-null object
appendcontent    735 non-null object
itemid           12023 non-null int64
title            12023 non-null object
dtypes: int64(3), object(7)
memory usage: 939.4+ KB

# 避免读取整个文件,通过nrows进行指定,这里我们读取5行
pd.read_csv('comments.csv',nrows=5)

    id  name    content today_time  fordearmetype   appenddays  appendtime  appendcontent   itemid  title
0   75  b***拉   此用户没有填写评论!  2018/8/21 08:00:35  颜色分类:优雅黑;尺码:70A 79  2018-10-24 15:32:36 这款我买了好几个颜色~超级好穿很舒服,不勒肉,滑滑凉凉的,天热穿应该很透气。也不是很松弛的那...   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
1   76  j***n   此用户没有填写评论!  2018/10/18 19:02:44 颜色分类:灰色1;尺码:75A 18  2018-10-22 11:38:30 不知道是因为面料差还是工艺差,这个文胸穿上身后非常非常扎人,简直1分钟都不能忍。把能加工的地...   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
2   77  心***凯   小心 美楠推荐啦!炒鸡喜欢。无限回购感觉小胸胸都大了呢!宝宝十八啦!现在想无限吐槽...    2018/10/10 09:33:26 颜色分类:黑色1;尺码:75A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
3   78  傻***瓜   第一次尝试这种不聚拢的内衣,同事推荐来买了,只从同事种草了悦小心的内衣,就天天跟我嚷嚷,多舒...   2018/10/13 11:05:51 颜色分类:黑色1;尺码:70A 11  2018-10-24 23:58:22 好   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
4   79  桃***e   之前在哔哩哔哩里看见一个up主推荐的,从来没有在网上购买过内衣,但是因为被包装和内衣的颜值给...   2018/10/20 20:05:27 颜色分类:白色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣

# 要逐块读取文件,需要设置chunksize
chunker = pd.read_csv('comments.csv',chunksize=1000)

# 这个TextFileReader对象可以遍历处理
# 返回N个数值1000的大小文件
list1 = []
for i in chunker:
    list1.append(i.id.count())
# 可以看见分批次的把文件变成了1000的大小
list1
[1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 23]

# TextFileReader可以get_chunk,读取任意大小的文件,必须开启iterator,否则报错。
data = pd.read_csv('comments.csv',iterator=True)
data.get_chunk(20)


id  name    content today_time  fordearmetype   appenddays  appendtime  appendcontent   itemid  title
0   75  b***拉   此用户没有填写评论!  2018/8/21 08:00:35  颜色分类:优雅黑;尺码:70A 79  2018-10-24 15:32:36 这款我买了好几个颜色~超级好穿很舒服,不勒肉,滑滑凉凉的,天热穿应该很透气。也不是很松弛的那...   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
1   76  j***n   此用户没有填写评论!  2018/10/18 19:02:44 颜色分类:灰色1;尺码:75A 18  2018-10-22 11:38:30 不知道是因为面料差还是工艺差,这个文胸穿上身后非常非常扎人,简直1分钟都不能忍。把能加工的地...   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
2   77  心***凯   小心 美楠推荐啦!炒鸡喜欢。无限回购感觉小胸胸都大了呢!宝宝十八啦!现在想无限吐槽...    2018/10/10 09:33:26 颜色分类:黑色1;尺码:75A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
3   78  傻***瓜   第一次尝试这种不聚拢的内衣,同事推荐来买了,只从同事种草了悦小心的内衣,就天天跟我嚷嚷,多舒...   2018/10/13 11:05:51 颜色分类:黑色1;尺码:70A 11  2018-10-24 23:58:22 好   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
4   79  桃***e   之前在哔哩哔哩里看见一个up主推荐的,从来没有在网上购买过内衣,但是因为被包装和内衣的颜值给...   2018/10/20 20:05:27 颜色分类:白色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
5   80  f***尽   这一款材质超级超级舒服摸起来超软的不是廉价的材质而且是我很喜欢的薄度唉 嘻嘻嘻五星好评送给客...   2018/10/24 13:31:35 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
6   81  r***t   料子很舒服,比起外面的 很亲肤。不过买的时候一定要注意买比平时大一个杯,这款内衣偏小码的    2018/10/22 14:18:12 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
7   82  j***p   非常柔软,心水了很久,这次终于买了~就是没有新包装很不开心!! 2018/10/24 00:17:01 颜色分类:白色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
8   83  清***月   非常贴合,也很舒适,是目前的内衣中最合适的了,一开始看到有博主推荐,所以想买了试一试,结果发...   2018/10/21 20:16:09 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
9   84  q***1   ForDearMe,这个名字就很好听,虽然我不爱穿内衣,但是毕竟不是所有场合都可以这么随性的...   2018/10/12 07:48:20 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
10  85  蜜***珀   挺舒服的一款内衣,有钢圈但是不会很压迫。小胸不空杯也不聚拢,穿上衣服会显得平,但确实很舒服,...   2018/10/17 15:29:07 颜色分类:黑色1;尺码:75A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
11  86  n***o   挺舒服的内衣,穿了以后有点胸型,小a也可以小性感~我胸骨高,穿上完全不用担心~盒子用来收纳包...   2018/10/21 10:35:11 颜色分类:灰色1;尺码:75A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
12  87  蔡***清   终于找到我这个宇宙无敌大平胸可以穿的内衣了,试过很多家,要么空杯,要么不敢穿。这个是真的舒服...   2018/10/24 12:49:57 颜色分类:黑色1;尺码:70A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
13  88  a***7   超级好穿 好像棉花一样 杯是偏小的 要买大一码 但是真的舒服到不行 秒杀什么68    2018/10/22 22:47:53 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
14  89  y***g   喜歡貨品,客服不行,回購三次共9份也不因為拍錯連接退19元差價,可惜。 2018/10/24 07:05:31 颜色分类:黑色1;尺码:75A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
15  90  滴***香   非常好,柔软舒适,平胸也能填满 2018/10/18 14:13:10 颜色分类:黑色1;尺码:70A 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
16  91  一***子   朋友推荐的店。内衣很好看也很舒服。会再来~   2018/10/23 12:25:03 颜色分类:黑色1;尺码:70C 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
17  92  z***1   根据客服咨询,70A,拍了70B,大小很合适,感谢,确实不聚拢,但是内衣无异味,轻薄柔软,穿...   2018/10/8 13:21:56  颜色分类:白色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
18  93  k***y   此用户没有填写评论!  2018/10/4 19:32:30  颜色分类:黑色1;尺码:70B 17  2018-10-07 09:38:57 穿了一段时间才来评价,客服很耐心,包装也很好看。一直都穿的B,所以买了B,到货之后发现小了,...   571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
19  94  w***1   内衣很薄,穿了完全不空杯,包装很好,穿着内衣躺在床上没有不舒服的感觉,穿其他内衣就会很不舒服...   2018/10/19 19:20:16 颜色分类:黑色1;尺码:70B 0   NaN NaN 571538277692    ForDearMe悦小心绒花优雅杯1/2罩杯文胸薄款聚拢小胸性感上托内衣
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!