关于 pandas 读取文件的问题

2018-05-19 12:12:53 +08:00
 RicardoScofileld

现有一个贼鸡儿大的文件,想要用 pandas 读取,文件是个是 str|str|str|str|str,用 pandas.read_table(path,header=None,sep='|')进行读取,但是文件里有一些脏数据,比如 str 中含有这|字符,所以用读取的时候老是异常,很蛋疼所以写了函数,进行处理,但是感觉好像有点蠢,各位大手子有没有什么别的方法。

这个是处理异常的函数,文件有 4 个多 G,用我这种方式要读到猴年马月了

def read_file(path):
    flag = True
    ignore_lines = []
    while flag:
        try:
            data = pd.read_table(path, header=None, sep='|', skiprows=ignore_lines)
        except Exception as e:
            error_line = re.search(r'line (\d+)', e.__str__()).group(1)
            ignore_lines.append(int(error_line))
        else:
            flag = Flase
    return data

2577 次点击
所在节点    Python
15 条回复
vinceguo
2018-05-19 12:57:33 +08:00
先把脏数据处理掉吧。先把分隔符个数不对的行挑出来写到别的地方,正确的行写到另一个地方
alexfu
2018-05-19 13:29:42 +08:00
awk -F"|" 'NF==5{print}' file.txt

可以用 subprocess 直接在 python 里读取结果
RicardoScofileld
2018-05-19 13:45:47 +08:00
@vinceguo 主要数据量很大,百万条级别的。
RicardoScofileld
2018-05-19 13:46:24 +08:00
@alexfu 是要对数据进行运算的
jowuIM
2018-05-19 14:04:05 +08:00
只能先对数据格式进行处理吧, 也就是把脏数据处理掉. 百万条但是却有 4G, 单挑数据应该不小.
jssyxzy
2018-05-19 15:06:13 +08:00
感觉应该先处理;
另外数据太大不考虑文件切割开来, 多开几个程序来读?
vinceguo
2018-05-19 15:32:06 +08:00
4G 数据能有多大。随便搞搞就好了。要相信电脑的速度
zzj0311
2018-05-19 15:40:42 +08:00
4g。。内存都不虚你虚什么
airqj
2018-05-19 16:04:58 +08:00
这么点数据用脚本处理再 pandas
RicardoScofileld
2018-05-19 16:31:40 +08:00
@vinceguo 靠,文件 4g,读到内存都不止啊,我用 ipython,试着读取,直接进程都崩了
RicardoScofileld
2018-05-19 16:32:19 +08:00
@airqj 处理个中间文件,在 pandas ?
alexfu
2018-05-19 16:43:37 +08:00
@RicardoScofileld 先用 awk 处理再读进 pandas 啊
kuhung
2018-05-19 16:46:25 +08:00
字符问题要考虑下怎么预处理。pandas 读大一点儿的数据,chunk 了解一下。
alexfu
2018-05-19 16:49:30 +08:00
@RicardoScofileld 文件切分也可以直接一步做了 `awk -F"|" 'NF==5 && NR%5==1{print}' file.txt ` 这是 5 份中取一份
janxin
2018-05-19 17:05:08 +08:00
pandas 如果不做处理,你这种纯字符串文件读出来的内存大小肯定是大于 4G,崩溃看一下是不是 oom,oom 那就是你能用的内存不够了呀

你要做的不是 pandas 读的时候异常就再来一次,因为你的方法会不停尝试 load,建议你最好预处理数据即可,不要尝试反复 load,内存没释放最后也是 oom 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX