Python 3.x 如何根据它们的ID合并两个大熊猫数据帧-通过块读取最大的文件?
我有两个CSV文件,df1_50GB.CSV和df2_1GB.CSV。我想根据匹配的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
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。谢谢代码将被更新,并将问题留给工作代码。因为它的性能还有改进的空间。目前它的性能相当慢。