来自文件夹嵌套 Zip 文件的 pandas read_csv 的 UnicodeDecodeError ('utf-8')
Posted
技术标签:
【中文标题】来自文件夹嵌套 Zip 文件的 pandas read_csv 的 UnicodeDecodeError (\'utf-8\')【英文标题】:UnicodeDecodeError ('utf-8') for pandas read_csv from folder nested Zip File来自文件夹嵌套 Zip 文件的 pandas read_csv 的 UnicodeDecodeError ('utf-8') 【发布时间】:2021-07-21 13:51:55 【问题描述】:我目前有一个包含 N 个文件夹列表的 zip 文件,每个文件夹包含 1+ 个 .csv 文件。我希望简单地从 zip 中读取这些 .csv 文件的选择,并使用 pandas 创建一个 DataFrame 列表。
我已通过“手动”方式成功完成此操作,我在本地解压缩文件并读取单个 .csv 文件。
但是,当我使用 zipfile 方法时,却出现以下错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xab in position ****: invalid start byte
我认为这将是一项直截了当的任务,但我似乎错过了一些步骤。我在下面给出了我的代码。但是,我怀疑问题的根源在于 zipfile 与 macOS(技术上是 Unarchiver)相比,解压文件的方式。我已经生成了一个测试 zip 文件并成功获得了 pandas DataFrame 输出。我只是对如何在“真实”数据上获得相同结果感到困惑。
很遗憾,我无法在此处发布有问题的原始数据。
import pandas as pd
import zipfile
# Sample loader for testing
sample_path = "Sample_ZipFile.zip"
with ZipFile(sample_path) as zipfiles:
sample_file_names = [file.filename for file in zipfiles.infolist() if file.filename[-4:]=='.csv']
data = zipfiles.open(sample_file_names[0])
testdat = pd.read_csv(data,dtype='str',index_col=False)
【问题讨论】:
我觉得问这个问题有点傻,因为很明显只是发生了一些简单的编码错误。但我还做了一个额外的观察。当通过 Jupyter Notebook 在我的机器上本地运行相同的笔记本并调用预先提取的相同数据文件时,pd.read_csv() 函数可以正常工作。但是,从 Google Colab 托管的实例中执行完全相同的操作(对 dir 路径进行了一些细微更改),我得到了编码错误。问题可能出在 Google Colab 如何使用 Pandas 处理编码? 作为参考,我发现了一个类似的问题讨论,但不清楚他们是如何“修复”它的。 see here 【参考方案1】:所以第二天早上经过一番沮丧的搜索后,我最终在 Pandas github 页面中偶然发现了一个类似的问题,you can look at here。
这似乎只是因为 Google Colab 和 Jupyter 处理 pandas (pd) pd.read_csv(和 pd.to_csv)的方式不同。
对于遇到相同错误的任何人,我设法通过以下方式解决了问题:
-
将
engine='python'
添加到pd.read_csv()
或添加同事建议的encoding='cp1252'
。
我假设到目前为止我的 Jupyter Notebooks 很幸运,没有看到任何编码错误。但我希望这个答案能帮助任何可能像我一样陷入困境的人......
【讨论】:
以上是关于来自文件夹嵌套 Zip 文件的 pandas read_csv 的 UnicodeDecodeError ('utf-8')的主要内容,如果未能解决你的问题,请参考以下文章
shutil make_archive 导致嵌套的 .zip 文件 [重复]
Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件zip压缩文件