【问题标题】:Pandas ignoring headers while reading large (2GB) csvPandas 在读取大 (2GB) csv 时忽略标题
【发布时间】:2019-11-18 10:47:01
【问题描述】:

我正在尝试使用 pandas 读取一个相当大的 CSV(2 GB)来进行一些数据类型操作并与我之前已经加载的其他数据帧连接。因为我想对记忆有点小心,所以我决定分块阅读。出于问题的目的,这里是我的带有虚拟数据的 CSV 布局的摘录(不能真正分享真实数据,抱歉!):

institution_id,person_id,first_name,last_name,confidence,institution_name
1141414141,4141414141,JOHN,SMITH,0.7,TEMP PLACE TOWN
10123131114,4141414141,JOHN,SMITH,0.7,TEMP PLACE CITY
1003131313188,4141414141,JOHN,SMITH,0.7,"TEMP PLACE,TOWN"
18613131314,1473131313,JOHN,SMITH,0.7,OTHER TEMP PLACE
192213131313152,1234242383,JANE,SMITH,0.7,"OTHER TEMP INC, LLC"

我读取文件的 pandas 代码:

inst_map = pd.read_csv("data/hugefile.csv",
                       engine="python",
                       chunksize=1000000,
                       index_col=False)

print("processing institution chunks")

chunk_list = []  # append each chunk df here
for chunk in inst_map:
    # perform data filtering
    chunk['person_id'] = chunk['person_id'].progress_apply(zip_check)
    chunk['institution_id'] = chunk['institution_id'].progress_apply(zip_check)

    # Once the data filtering is done, append the chunk to list
    chunk_list.append(chunk)

ins_processed = pd.concat(chunk_list)

我正在应用的zip check 函数基本上是执行一些数据类型检查,然后将它得到的值转换为整数。

每当我读取 CSV 时,它只会读取 institution_id 列并生成索引。 CSV 中的其他列只是静默删除。

当我不使用 index_col=False 作为选项时,它只会将 1141414141/4141414141/JOHN/SMITH/0.7(基本上是行中的前 5 个值)设置为索引,并且仅将 institution_id 作为标题,同时仅将 institution_name 读取到数据框作为一个值。

老实说,我不知道这里发生了什么,经过 2 小时的 SO / google 搜索后,我决定只问这个问题。希望有人能帮帮我,谢谢!

【问题讨论】:

  • 我无法重现您的问题。
  • 我好像也有类似的问题。当我只是将数据的一个子集复制到一个新文件中时,不会出现问题,这让我相信它是 csv 的格式问题。您是否碰巧知道什么格式错误会导致 pandas 以我上面描述的方式读取 csv?
  • 尝试将块大小设置为更小,可能为 10。另外,在你的 for 循环中添加一个枚举器,如果在几个循环后停止。然后看看你是否遇到同样的问题。如果不继续增加停止点,直到您重现错误。这至少会缩小文件中问题所在的范围。
  • 似乎即使我只使用 10 的块大小,整个数据帧也会像描述的那样中断。我怀疑 CSV 文件本身一定有问题。奇怪的是,无论我使用什么其他工具(CSViewer),它都能正常工作。只有熊猫给我带来了问题。我想我将不得不对文件本身进行更多调查。
  • 更新:感谢@James!问题是在将大型 CSV 文件传输到我的远程处理服务器(有足够的 RAM 可以在内存编辑中处理)时出现问题。在我的本地计算机上处​​理这些块似乎有效。我想我将不得不重新上传更大的文件或尝试不同的处理方法。

标签: python pandas csv dataframe


【解决方案1】:

问题是在将大型 CSV 文件传输到我的远程处理服务器(有足够的 RAM 可以在内存编辑中处理)时出现问题。在我的本地计算机上处​​理这些块似乎有效。

重新上传文件后,它在远程服务器上运行良好。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多