【问题标题】:Join two large files by column in python在python中按列连接两个大文件
【发布时间】:2018-10-10 14:57:25
【问题描述】:

我有 2 个文件,每个文件有 38374732 行,每个文件大小为 3.3 G。我正试图在第一列加入他们。为此,我决定将 pandas 与从 Stackoverflow 提取的以下代码一起使用:

 import pandas as pd
 import sys
 a = pd.read_csv(sys.argv[1],sep='\t',encoding="utf-8-sig")
 b = pd.read_csv(sys.argv[2],sep='\t',encoding="utf-8-sig")
 chunksize = 10 ** 6
 for chunk in a(chunksize=chunksize):
   merged = chunk.merge(b, on='Bin_ID')
   merged.to_csv("output.csv", index=False,sep='\t')

但是我遇到了内存错误(不足为奇)。我查看了带有 pandas 块的代码(类似于 How to read a 6 GB csv file with pandas),但是如何在一个循环中为两个文件实现它,我认为我不能对第二个文件进行分块,因为我需要查找列在整个第二个文件中。有没有办法解决这个问题?

【问题讨论】:

  • 我改了问题,谢谢

标签: python pandas join dask chunks


【解决方案1】:

这已经在您提到的其他帖子中讨论过(this,或this,或this)。

正如那里解释的那样,我会尝试使用dask dataframe 来加载数据并执行合并,但取决于您的 PC,您可能仍然无法执行此操作。

最小工作示例:

import dask.dataframe as dd

# Read the CSVs
df1 = dd.read_csv('data1.csv')
df2 = dd.read_csv('data2.csv')

# Merge them
df = dd.merge(df1, df2, on='Bin_ID').compute()

# Save the merged dataframe
df.to_csv('merged.csv', index=False)

【讨论】:

  • 最终你可以直接开火to_parquet()/to_csv() 而不是.compute()
  • to_csv() 在上面的例子中已经被调用了。如果您想获得结果in memorycompute() 是必需的。如果它们不适合内存,那么可以,您可以将它们直接保存到磁盘中。
  • 我想我们说的是同一件事。 ;)
  • 如何在 pipfile 中安装 dask 数据框?
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2022-11-17
  • 2013-11-02
  • 2015-05-09
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多