代码之家  ›  专栏  ›  技术社区  ›  Erlinska

用pandas读取gzip文件不起作用

  •  1
  • Erlinska  · 技术社区  · 8 年前

    我卷入了一个关于熊猫的小问题 pd.read_csv

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

    我想将它们加载到python中,为此,我使用了通常的 函数,添加 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 回复  |  直到 8 年前
        1
  •  2
  •   etopylight    8 年前

    快速查看原始csv文件可以发现它包含空字符 ^@ 这就是为什么 pandas 无法正确分析它

    可以使用shell命令清除这些字符

    gzip -dc 1.csv.gz | tr -d '\0' | gzip > 1_clean.csv.gz
    
    • gzip -dc 将文件解压缩为标准输出
    • tr -d '\0' 删除空字符
    • gzip 将其压缩回gzip文件

    熊猫 应该能够正确阅读


    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'))