【问题标题】:How to read a big file(bigger than 1 billion) with Chunk如何使用 Chunk 读取大文件(大于 10 亿)
【发布时间】: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


【解决方案1】:

解决方法如下:

df = pd.read_csv("filename.csv", nrows=100000, sep="|", encoding="iso8859-9")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 2014-12-11
    • 2023-03-17
    • 1970-01-01
    • 2010-09-22
    • 2012-05-02
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多