Python 3.x 如何根据它们的ID合并两个大熊猫数据帧-通过块读取最大的文件?

Python 3.x 如何根据它们的ID合并两个大熊猫数据帧-通过块读取最大的文件?,python-3.x,pandas,Python 3.x,Pandas,我有两个CSV文件,df1_50GB.CSV和df2_1GB.CSV。我想根据匹配的ID值合并数据帧。 以下是我到目前为止所做的 f50GB = "df1_50GB.csv" f1GGB = "df1_1GGB.csv" result_file = "output.csv" tmp50GB = pd.read_csv(f50GB, nrows=3) tmp1GB = pd.read_csv(f1GGB, nrows=3) # creating an empty bucket to sa

我有两个CSV文件,df1_50GB.CSV和df2_1GB.CSV。我想根据匹配的ID值合并数据帧。 以下是我到目前为止所做的

f50GB =  "df1_50GB.csv"
f1GGB =  "df1_1GGB.csv"
result_file =  "output.csv"

tmp50GB = pd.read_csv(f50GB, nrows=3)
tmp1GB = pd.read_csv(f1GGB, nrows=3)

# creating an empty bucket to save result
df_result = pd.DataFrame(columns=(tmp50GB.columns.append(tmp1GB.columns)).unique())
df_result.to_csv(result_file, index_label=False)
tmp1GB = pd.read_csv(f1GGB)
# Save (append) data which the ID of f1GB  mached with f50GB i.e (x)  #
def save_merged_csv(x):
    df = pd.merge(x, tmp1GB, on='ID', how='left')
    df.to_csv(result_file, mode="a", header=False, index=False)


# create the iterator
csv_reader = pd.read_csv(
    f50GB,
    iterator=True,
    chunksize=100000)

[save_merged_csv(r) for r in csv_reader]
但我不断收到错误“TypeError:只能合并序列或数据帧对象,已传递” [更新]错误现已修复。感谢@Michael Gardner。但我不确定逻辑是否正确。结果的文件大小太大。它也很慢。所以
如果还有改进的余地,我就把它留在这里

在您的
save\u merged
func中,似乎需要将
f1GGB
替换为
tmp1GB
我不这么认为,从逻辑上讲,迭代器应该处理最大的文件(f50GB)。替换它也不起作用。在您的代码中,
f1GGB
是字符串
“df1_1GGB.csv”
,您正在尝试将其与
f50GB
的块合并。这就是为什么你会收到那个特定的错误信息。明白了。我应该先在内存中读取f1GB。谢谢代码将被更新,并将问题留给工作代码。因为它的性能还有改进的空间。目前它的性能相当慢。