【问题标题】:Pandas throwing error on compressed file (xz)Pandas 在压缩文件 (xz) 上抛出错误
【发布时间】:2022-02-06 15:12:43
【问题描述】:
import pandas as pd
import lzma

df = pd.read_csv('final.csv', headers = None)

with open('/xzfolder/final.xz', 'wb') as f:
    f.write(lzma.compress(df.to_records(index=False), format=lzma.FORMAT_XZ))    

df = pd.read_csv('/xzfolder/final.xz', headers = None)

以上是我的代码。我正在使用 lzma 压缩我的 csv...但是当我读取压缩文件时,我得到 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 8: invalid continuation byte

【问题讨论】:

  • pandas.read_csv 只接受文本文件。它无法读取您的压缩二进制文件。您必须先解压缩它,然后使用 pandas.read_csv
  • 我没有尝试使用xz 压缩文件,但使用gzip 压缩文件,如果我通过压缩,我可以使用read_csv 选项直接读取它 - pd.read_csv("filename.gz", headers=None, compression="gzip") 有效
  • @Mortz 好的。但问题不是在谈论 gzip。
  • 我的意思是你可以尝试直接传递压缩参数——你似乎没有尝试过——即df = pd.read_csv('file.xz', compression='...')
  • @Mortz 它仍然给出错误。我努力了。您也可以尝试确认一下。

标签: pandas lzma


【解决方案1】:

我尝试了您的代码并遇到了同样的错误。我还尝试使用命令行实用程序(Linux 上的 xz)“取消 xz”创建的文件,但即使这样似乎也会产生垃圾 - 表明文件创建有问题。

我将代码更改为使用 .to_string().encode() - 从而强制一个字节对象并且它可以工作

import lzma
import pandas as pd
df = pd.read_csv('somefile.txt', header=None)
with open('somez.xz', 'wb') as f:
            f.write(lzma.compress(df.to_string().encode()
           , format=lzma.FORMAT_XZ))

df_re = pd.read_csv('somez.xz')

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2015-07-25
    • 1970-01-01
    • 2018-06-27
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多