【发布时间】:2021-10-03 21:14:28
【问题描述】:
我有一个超过 10 亿行的数据集,我想读取 100k 行。首先,我尝试使用以下 nrows 阅读它:
df = pd.read_csv("filename.csv",nrows=100000,sep='|')
但它会抛出一个UnicodeDecodeError,如下所示。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 3: unexpected end of data
然后我用chunksize参数试了一下,如下:
a= pd.read_csv("filename.csv", chunksize=10000,sep='|')
pd.concat(a)
但它给了我同样的错误。我也尝试过如下的 Dask 库,但它给出了同样的错误。
import dask.dataframe as dd
df = dd.read_csv('filename.csv')
你能帮忙解决一下吗?
提前致谢。
【问题讨论】:
-
您的文件不是 UTF-8 字符集。你知道它是什么字符集吗?
-
你需要知道这一点。如果您查看编辑器中的前几行,您应该能够判断是否有非 ASCII 字符。文件来自哪里?
-
您可以上传大约前 10 行的文件。如果里面有一些重要的数据,你可以用一些随机数据替换它们,但保持相同的类型和编码。
-
UTF8 和所有其他单字节代码页对于 0-127 范围内的字符(包括英文字符)相同。显然,您的文件包含 非 英文字符。用什么语言?您是否尝试过使用与语言匹配的代码页? Latin1/iso-8859-1 涵盖了大多数欧洲语言。土耳其?西里尔文?
-
真正的解决办法是告诉制作文件的人将来使用 UTF8。这不是 new 编码。至少在过去 21 年中,美国和西欧以外的所有计算依赖 Unicode - 自 Windows NT 以来的 Windows 字符串都是 Unicode。由于代码页不兼容而导致的文本损坏在 1990 年代是一个问题,但自从 Windows 2000 和 Java、C#、Javascript 和 VB.NET 等 Unicode 语言开始流行后,它基本上消失了。甚至 VB6 也有 Unicode 字符串(但没有 UTF8)
标签: python python-3.x csv dask chunking