【发布时间】:2016-10-20 15:01:37
【问题描述】:
我有两个数据框
>>df1.info()
>><class 'pandas.core.frame.DataFrame'>
Int64Index: 2598374 entries, 3975 to 3054366
Data columns (total 14 columns): ......
>>df2.info()
>><class 'pandas.core.frame.DataFrame'>
Int64Index: 2520405 entries, 2066 to 2519507
Data columns (total 5 columns): ......
我想加入他们。我尝试了pd.merge,但出现内存错误。因此,我尝试在没有pd.merge 的情况下做同样的事情。
原始方法的示例数据框(失败:内存错误)
df1 = pd.DataFrame({'A': ['1', '2', '3', '4','5'],
'B': ['1', '1', '1', '1','1'],
'C': ['c', 'A1', 'a', 'c3','a'],
'D': ['B1', 'B1', 'B2', 'B3','B4'],
'E': ['3', '3', '3', '3','3'],
'F': ['3', '4', '5', '6','7'],
'G': ['2', '2', '2', '2','2']})
df2 = pd.DataFrame({'A': ['1', '2', '8','4'],
'B': ['1', '2', '5','1'],
'x': ['3', '3', '2','2'],
'y': ['3', '4', '6','7'],
'z': ['2', '2', '2','2']})
>> df1
A B C D E F G
0 1 1 c B1 3 3 2
1 2 1 A1 B1 3 4 2
2 3 1 a B2 3 5 2
3 4 1 c3 B3 3 6 2
4 5 1 a B4 3 7 2
df2
A B x y z
0 1 1 3 3 2
1 2 2 3 4 2
2 8 5 2 6 2
3 4 1 2 7 2
df1 = pd.merge(df1,df2,how='inner',on=['A','B'])
>> df1
A B C D E F G x y z
0 1 1 c B1 3 3 2 3 3 2
1 4 1 c3 B3 3 6 2 2 7 2
新方法示例
(1) 我试图按列 ['A']['B'] 删除 df1 中不在 df2 中的行。
(2) 将 x,y,z 列连接到 df1
df1 = pd.DataFrame({'A': ['1', '2', '3', '4','5'],
'B': ['1', '1', '1', '1','1'],
'C': ['c', 'A1', 'a', 'c3','a'],
'D': ['B1', 'B1', 'B2', 'B3','B4'],
'E': ['3', '3', '3', '3','3'],
'F': ['3', '4', '5', '6','7'],
'G': ['2', '2', '2', '2','2']})
df2 = pd.DataFrame({'A': ['1', '2', '8','4'],
'B': ['1', '2', '5','1'],
'x': ['3', '3', '2','2'],
'y': ['3', '4', '6','7'],
'z': ['2', '2', '2','2']})
>> df1
A B C D E F G
0 1 1 c B1 3 3 2
1 2 1 A1 B1 3 4 2
2 3 1 a B2 3 5 2
3 4 1 c3 B3 3 6 2
4 5 1 a B4 3 7 2
df2
A B x y z
0 1 1 3 3 2
1 2 2 3 4 2
2 8 5 2 6 2
3 4 1 2 7 2
df1 = df1.loc[((df1['A'].isin(df2.A)) & (df1['B'].isin(df2.B)) ) ]
>> df1
A B C D E F G
0 1 1 c B1 3 3 2
1 2 1 A1 B1 3 4 2
3 4 1 c3 B3 3 6 2
但是,我遇到了一个逻辑错误,我不知道如何解决这个问题。 任何人都可以帮忙吗?
【问题讨论】:
-
你试过
df3 = pd.merge(df1,df2,how='inner',on=['A','B'])吗? -
@JoeR 是的,我试过了。遇到同样的问题
-
根据您的真实数据,您可能需要对部分/所有列进行分类 - 这可能会节省一些 RAM,尤其是当列中有大量重复值时