为了账号安全,请及时绑定邮箱和手机立即绑定

内存错误:- 如何使用一个公共 ID 列从一个数据帧到另一个数据帧?

内存错误:- 如何使用一个公共 ID 列从一个数据帧到另一个数据帧?

慕工程0101907 2022-04-23 17:19:13
我有两个数据框 df1 和 df2。它们之间有一个共同的 ID 列。我需要根据 df1 中的 ID 从 df2 列中提取数据,但是我面临 MemoryError,因为数据帧很大,每个数据点超过 300 万个。我试过使用: -aq = pd.DataFrame(np.where(df2[df2['pid1'].isin(df1['shortId'])]))但它遇到内存错误。有没有有效的方法来做到这一点?数据框如下所示:-df1:-ShortID x   y   zqwe 1   1   1asd 1   1   1zxc 1   1   1rty 1   1   1fgh 1   1   1vbn 1   1   1df2:-pid1    pid2    Col1    Col2    Col3    Col4qwe qasd    values  values  values  valuesasd uio values  values  values  valueszxc plm values  values  values  valuesrty okn values  values  values  valuesfgh uhb values  values  values  valuesvbn tgv values  values  values  valuesqasd    qwe values  values  values  valuesuio asd values  values  values  valuesplm zxc values  values  values  valuesokn rty values  values  values  valuesuhb fgh values  values  values  valuestgv vbn values  values  values  values结果应如下所示:-ShortID x   y   z   Col1    Col2    Col3    Col4qwe 1   1   1   values  values  values  valuesasd 1   1   1   values  values  values  valueszxc 1   1   1   values  values  values  valuesrty 1   1   1   values  values  values  valuesfgh 1   1   1   values  values  values  valuesvbn 1   1   1   values  values  values  values
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

merge应该更有效:

df1.merge(df2, left_on='ShortID', right_on='pid1', how='left').drop(columns=['pid1','pid2'])

如果这仍然引发内存错误,您可能需要使用dask dataframes,即将数据读入 dask dataframes 并以与上面编写的相同方式合并它们(除了 dask 2.2.0 不支持columns参数 in drop,因此您必须使用.drop('rkey', axis=1)


查看完整回答
反对 回复 2022-04-23
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号