【问题标题】:pandas: Join two data frames on columns of different typespandas:在不同类型的列上加入两个数据框
【发布时间】:2017-08-29 00:06:16
【问题描述】:

我正在尝试加入(合并)两个 pandas 数据框:df_Adf_B。我想加入df_A.a_number = df_B.b_number

但是,df_A.a_number 的类型为 int64df_B.b_number 的类型为 object。我尝试在合并之前将它们都转换为str,如下所示,但似乎不起作用...

df_A.a_number.astype('str')
df_A.dtypes

a_number       int64
a_set    object
dtype: object

这里是df_B:

df_B.b_number.astype('str')
df_B.dtypes

b_number    object
dtype: object

然后我尝试加入 df_A 和 df_B:

df_C = pd.merge(df_A,df_B, how ='inner', left_on = ['a_number'], right_on = ['b_number'])
df_C

但是,df_C 是空的(不应该这样)。我猜可能是因为a_numberb_number 的类型不同,并且没有正确转换为str?有人可以建议吗?谢谢!

【问题讨论】:

    标签: python python-3.x pandas join merge


    【解决方案1】:

    尝试将df_A.a_number 保留为Int64,并将df_B.b_number 中的密钥也转换为Int64

    df_B.b_number.astype('int')
    df_C = pd.merge(df_A,df_B, how ='inner', left_on = ['a_number'], right_on = ['b_number'])
    

    【讨论】:

      【解决方案2】:

      由于 df_A.a_number 是 int64 并且您想将其转换为 str,您可以执行以下操作-

      df_A.a_number = df_A.a_number.astype('str')
      

      我猜你错过了更改列的分配。 分配转换后的 df_A.a_number 后,您可以进行连接,它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 2020-09-26
        • 2013-02-04
        相关资源
        最近更新 更多