合并两个具有不同形状的熊猫数据框时出现问题吗?

约翰·杜

这很简单,但是我不明白为什么我不能合并两个数据框。我有以下df形状不同的s(一个形状大于另一个形状):

df1

    A                      id
0   microsoft inc          1
1   apple computer.        2
2   Google Inc.            3
3   IBM                    4
4   amazon, Inc.           5

df2

    B   C   D   E   id
0   (01780-500-01)  237489 - 342    API     True.   1
0   (409-6043-01)   234324  API     Other   2
0   23423423    API     NaN     NaN     3
0   (001722-5e240-60)   NaN     NaN     Other   4
1   (0012172-52411-60)  32423423.   NaN     Other   4
0   29849032-29482390   API     Yes     False   5
1   329482030-23490-1   API     Yes     False   5

我想合并df1df2index列:

df3

    A   B   C   D   E   id
0   microsoft inc   (01780-500-01)  237489 - 342    API     True.   1
1   apple computer. (409-6043-01)   234324  API     Other   2
2   Google Inc. 23423423    API     NaN     NaN     3
3   IBM (001722-5e240-60)   NaN     NaN     Other   4
4   IBM (0012172-52411-60)  32423423.   NaN     Other   4
5   amazon, Inc.    29849032-29482390   API     Yes     False   5
6   amazon, Inc.    329482030-23490-1   API     Yes     False   5

我知道,这可以通过使用来完成合并() 另外,我看了这个优秀的教程,并试图:

在:

pd.merge(df1, df2, on=df1.id, how='outer')

出:

IndexError: indices are out-of-bounds

然后我尝试了:

pd.merge(df2, df1, on='id', how='outer')

显然,它重复了几次合并的行,如下所示:

    A   B   C   D   E   index
0   microsoft inc   (01780-500-01)  237489 - 342    API     True.   1
1   apple computer. (409-6043-01)   234324  API     Other   2
2   apple computer. (409-6043-01)   234324  API     Other   2
3   apple computer. (409-6043-01)   234324  API     Other   2
4   apple computer. (409-6043-01)   234324  API     Other   2
5   apple computer. (409-6043-01)   234324  API     Other   2
6   apple computer. (409-6043-01)   234324  API     Other   2
7   apple computer. (409-6043-01)   234324  API     Other   2
8   apple computer. (409-6043-01)   234324  API     Other   2
...

我认为这与以下事实有关:我创建了一个时间索引,df2['position'] = df2.index因为这些索引看起来很奇怪,然后将其删除了。那么,我的问题是如何获得df3

更新

我固定了这样的索引df2

df2.reset_index(drop=True, inplace=True)

现在看起来像这样:

    B   C   D   E   id
0   (01780-500-01)  237489 - 342    API     True.   1
1   (409-6043-01)   234324  API     Other   2
2   23423423    API     NaN     NaN     3
3   (001722-5e240-60)   NaN     NaN     Other   4
4   (0012172-52411-60)  32423423.   NaN     Other   4
5   29849032-29482390   API     Yes     False   5
6   329482030-23490-1   API     Yes     False   5

我仍然有同样的问题。合并后的行被重复数次。

>>>print(df2.dtypes)
B    object
C    object
D    object
E    object
id   int64
dtype: object

>>>print(df1.dtypes)
A                object
id               int64
dtype: object

更新2

>>>print(df2['id'])
0        1
1        2
2        3
3        4
4        4
5        5
6        5
7        6
8        6
9        7
10       8
11       8
12       8
13       8
14       9
15      10
16      11
17      11
18      12
19      12
20      13
21      13
22      14
23      15
24      16
25      16
26      17
27      17
28      18
29      18
      ... 
476    132
477    132
478    132
479    132
480    132
481    132
482    132
483    132
484    133
485    133
486    133
487    133
488    134
489    134
490    134
491    134
492    135
493    135
494    136
495    136
496    137
497    137
498    137
499    137
500    137
501    137
502    137
503    138
504    138
505    138
Name: id, dtype: int64

>>>print(df1)

0       1
1       2
2       3
3       4
4       5
5       6
6       7
7       8
8       9
9      10
10     11
11      8
12     12
13      6
14      7
15      8
16      6
17     11
18     13
19     14
20     15
21     11
22      2
23     16
24     17
25     18
26      9
27     19
28     11
29     20
       ..
108    57
109    43
110    22
111     2
112    58
113    49
114    22
115    59
116     2
117     6
118    22
119     2
120    37
121     2
122     9
123    60
124    61
125    62
126    63
127    42
128    64
129     4
130    29
131    11
132     2
133    25
134     4
135    65
136    66
137     4
Name: id, dtype: int64
西瓦姆·高尔(Shivam Gaur)

你可以尝试设置索引id,然后使用join

df1 = pd.DataFrame([('microsoft inc',1),
('apple computer.',2),
('Google Inc.',3),
('IBM',4),
('amazon, Inc.',5)],columns = ('A','id'))

df2 = pd.DataFrame([('(01780-500-01)','237489', '- 342','API',   1),
('(409-6043-01)','234324', ' API','Other   ',2),
('23423423','API', 'NaN','NaN',     3),
('(001722-5e240-60)','NaN', 'NaN','Other',   4),
('(0012172-52411-60)','32423423','   NaN','Other',   4),
('29849032-29482390','API', '    Yes','     False',   5),
('329482030-23490-1','API', '    Yes','     False',   5)],
columns = ['B','C','D','E','id'])

df1  =df1.set_index('id')
df1.drop_duplicates(inplace=True)
df2  = df2.set_index('id')
df3  = df1.join(df2,how='outer')

由于您已经为两个数据框设置了索引列(也称为联接键),因此不必指定on='id'参数。

这是解决这个问题的另一种方法。我看不出什么毛病pd.merge(df1, df2, on='id', how='outer')你可能想仔细检查id列在这两个dataframes,由@JohnE提到

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试合并两个不同数据帧的两列时出现问题?

当一个是多级索引而另一个不是多级索引时,如何求和具有不同形状的两个数据框的值

如何用熊猫划分两个不同形状的数据框?

熊猫,比较具有不同形状的数据框列

比较具有不同形状的熊猫数据框

使用python或pandasql附加两个具有不同形状的pandas数据框并在for循环中

基于多个列在两个具有不同形状的数据框之间减去多个列

合并两个具有相似值但日期熊猫不同的不同数据框

将两个具有相同形状和相同列名的Pandas数据框相乘

熊猫-合并两个具有不同行数的数据框

熊猫:合并两个具有不同索引和缺失值的数据框

合并两个具有不同列数和顺序的数据框(熊猫)

当一个在熊猫中具有multiIndex时合并两个数据框

numpy的,合并两个不同形状的数组

合并两个熊猫数据框两个创建具有特定操作的新数据框

熊猫合并两个不同长度的数据框

熊猫合并具有不同日期和列的两个数据框

熊猫合并具有不同列的两个数据框

根据两列从具有不同形状的数据框中获取值

如何使用TensorFlow连接具有不同形状的两个张量?

两个不同形状的BST的Will数组形式始终具有不相等的数组

在Keras中连接两个具有不同形状的张量

汇总具有不同形状的数据框列

如何将熊猫MultiIndex数据框的值映射到其他具有不同形状的MultiIndex数据框?

如何在略有不同的键上合并两个熊猫数据框

合并具有复杂条件的两个熊猫数据框

如何合并具有不同时间戳密度的两个熊猫数据帧?

合并具有不同列的两个火花数据框以获取所有列

合并两个不同列中具有匹配值的数据框-Pandas