我在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
答案 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'))