用pandas读取gzip文件不起作用

时间:2017-10-29 03:08:42

标签: python pandas csv gzip

我在pandas pd.read_csv函数中遇到了一个小问题:

我已经以csv.gzip文件的形式下载了大量数据,我宁愿让它们在我的计算机上压缩,因为它们占用了大量的空间。

我想将它们加载到python中,为此,我一直在使用通常的pd.read_csv函数,添加compression='gzip'参数,而pandas设法用正确的数量读取csv列和正确的索引长度,数据是完整的错误:

tick = pd.read_csv("D:\Finance python\Data\EUR_USD\Tick\\2015\\1.csv.gz",compression='gzip')

tick.head()
Out[30]: 
    D  Unnamed: 1  Unnamed: 2
0 NaN         NaN         NaN
1 NaN         NaN         NaN
2 NaN         NaN         NaN
3 NaN         NaN         NaN
4 NaN         NaN         NaN

当我尝试阅读文件时,有人会知道我做错了吗?

Pandas清楚地认识到数据是以gzip形式存在的,但我不知道为什么它无法正确提取数据。^

由于

我正在尝试阅读的数据: https://tickdata.fxcorporate.com/EURUSD/2015/1.csv.gz

1 个答案:

答案 0 :(得分:2)

快速查看原始csv文件会显示它包含空字符^@,这就是pandas无法正确解析的原因

您可以使用shell命令

清理这些特征
gzip -dc 1.csv.gz | tr -d '\0' | gzip > 1_clean.csv.gz
  • gzip -dc将文件解压缩为stdout
  • tr -d '\0'删除空字符
  • gzip将其压缩回gzipped文件

之后pandas应该能够正确阅读

<强>更新

如果你无法访问shell,你仍然可以使用python来做这个技巧,虽然它会慢一些

import gzip

with gzip.open('1.csv.gz', 'rb') as f:
    data = f.read()

with gzip.open('1_clean.csv.gz', 'wb') as f:
    f.write(data.decode('utf-8').replace('\x00', '').encode('utf-8'))