[英]Merging two large dataframe in Pandas
我可以在这里看到一些你可以做的显而易见的事情:
X
/ Y
/ Z
列的B
和R
/ G
/ B
是多余的,然后删除R
/ G
最后一列中的df
列你当然不需要它们被复制 1.43 亿次。X
/ Y
/ Z
的唯一值数量及其数据类型,您可以通过使用如下分类数据类型来减少 memory 占用空间:# Convert to categorical data types (if every value is unique, don't bother!)
for df_temp in [df, df2]:
for col in ['X', 'Y', 'Z']:
df_temp.loc[:, col] = df_temp[col].astype('category')
# Merge using less memory
result = pd.merge(df, df2, on=["X", "Y", "Z"], how='left')
X
并单独处理它们,然后连接各个结果以提供最终结果,例如:result_dfs = []
ranges = [0, 1000, 2000, 3000, 4000, ...]
for start, end in zip(ranges[:-1], ranges[1:]):
df_idx = (df['X'] >= start) & (df['X'] < end)
df2_idx = (df2['X'] >= start) & (df2['X'] < end)
result_dfs.append(
pd.merge(
df[df_idx],
df2[df2_idx],
on=["X", "Y", "Z"],
how='left'
)
)
# Remove the original data to to reduce memory consumption
df2 = df2[~df2_idx]
result = pd.concat(result_dfs)
但这可能仍然行不通,因为当您进行最终连接时,您仍然需要在短时间内将 memory 中的完整数据集两次!
如果这些都不起作用,恐怕你需要更多的 memory,或者你需要使用 Pandas 以外的东西来解决你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.