【问题标题】:Pandas: Key error in merge after creating index熊猫:创建索引后合并中的关键错误
【发布时间】:2016-11-20 01:33:30
【问题描述】:

我有大型数据框要合并到确保合并以多处理方式进行我决定使用索引。但是在创建索引后,我得到了关键错误。

例如:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})
(Pdb) df1
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
3  A3  B3

但是第二个DataFrame:

df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'C': ['C1', 'C2', 'C3', 'C4']})
(Pdb) df2
    A   C
0  A0  C1
1  A1  C2
2  A2  C3
3  A3  C4

现在我为列A 为索引的两个数据框设置索引。

df1.set_index('A', inplace=True)
df2.set_index('A', inplace=True)

(Pdb) df1
     B
A     
A0  B0
A1  B1
A2  B2
A3  B3

(Pdb) df2
     C
A     
A0  C1
A1  C2
A2  C3
A3  C4

现在当我进行合并时:

(Pdb) result = pd.merge(df1, df2, on='A')
*** KeyError: 'A' 

但如果我在不创建索引的情况下执行此操作,则不会出现关键错误。

(Pdb) df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})
(Pdb) df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'C': ['C1', 'C2', 'C3', 'C4']})
(Pdb) result = pd.merge(df1, df2, on='A')
(Pdb) result
    A   B   C
0  A0  B0  C1
1  A1  B1  C2
2  A2  B2  C3
3  A3  B3  C4

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果你合并索引,你应该同时:

    • 未在merge 中指定密钥
    • 使用left_index = Trueright_index = True 参数到merge

    否则,您必须明确告知您的密钥使用的是什么key =

    【讨论】:

    • 我想加快合并速度,这就是我想创建索引的原因。但我试过 left_index=True 仍然得到关键错误。
    • 如果你的两个键都是indeces,你应该同时使用left_indexright_index
    • (Pdb) result2 = pd.merge(df1, df2, on='A', left_index=True, right_index=True) *** KeyError: 'A' 看起来还是一样的错误
    • 哥们放下那把钥匙! :) pd.merge(df1, df2, left_index=True, right_index=True)
    【解决方案2】:

    当您指定 on=A 时,您是在告诉 Pandas 您想使用 A 列进行合并。当您将 A 设为索引时,它不再是框架中的一列。
    您可以合并,然后将 A 设为索引,或者将 A 设为索引,然后指定 left_index=Trueright_index=True

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 2018-07-13
      • 2020-04-05
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 2023-03-25
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多