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

我有两个数据框 df1 和 df2。它们之间有一个共同的 ID 列。我需要根据 df1 中的 ID 从 df2 列中提取数据,但是我面临 MemoryError,因为数据帧很大,每个数据点超过 300 万个。


我试过使用: -


aq = pd.DataFrame(np.where(df2[df2['pid1'].isin(df1['shortId'])]))

但它遇到内存错误。有没有有效的方法来做到这一点?


数据框如下所示:-


df1:-


ShortID x   y   z

qwe 1   1   1

asd 1   1   1

zxc 1   1   1

rty 1   1   1

fgh 1   1   1

vbn 1   1   1

df2:-


pid1    pid2    Col1    Col2    Col3    Col4

qwe qasd    values  values  values  values

asd uio values  values  values  values

zxc plm values  values  values  values

rty okn values  values  values  values

fgh uhb values  values  values  values

vbn tgv values  values  values  values

qasd    qwe values  values  values  values

uio asd values  values  values  values

plm zxc values  values  values  values

okn rty values  values  values  values

uhb fgh values  values  values  values

tgv vbn values  values  values  values

结果应如下所示:-


ShortID x   y   z   Col1    Col2    Col3    Col4

qwe 1   1   1   values  values  values  values

asd 1   1   1   values  values  values  values

zxc 1   1   1   values  values  values  values

rty 1   1   1   values  values  values  values

fgh 1   1   1   values  values  values  values

vbn 1   1   1   values  values  values  values


慕工程0101907
浏览 143回答 1
1回答

饮歌长啸

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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python