我有一个较大的熊猫数据框(磁盘上的 1.5gig .csv)。我可以将它加载到内存中并查询它。我想创建一个新列,它是其他两列的组合值,我尝试了这个:
def combined(row):
row['combined'] = row['col1'].join(str(row['col2']))
return row
df = df.apply(combined, axis=1)
这导致我的 python 进程被杀死,大概是因为内存问题。
该问题的一个更迭代的解决方案似乎是:
df['combined'] = ''
col_pos = list(df.columns).index('combined')
crs_pos = list(df.columns).index('col1')
sub_pos = list(df.columns).index('col2')
for row_pos in range(0, len(df) - 1):
df.iloc[row_pos, col_pos] = df.iloc[row_pos, sub_pos].join(str(df.iloc[row_pos, crs_pos]))
这当然看起来很不熊猫。而且速度很慢。
理想情况下,我想要apply_chunk()
与 apply 相同但仅适用于数据框的一部分。我认为dask
这可能是一个选择,但是dask
当我使用数据框时,它们似乎还有其他问题。不过,这一定是一个常见问题,我应该使用一种设计模式来向大型熊猫数据框添加列吗?