如何使用 pandas pd.merge 合并 int64 和对象

How to merge int64 and object using pandas pd.merge

我正在尝试根据两个数据帧中共享的“别名编号”列名称合并两个数据帧。

一个数据框的“别名编号”值为 整数,另一个数据框的“别名编号”值为 对象,因为某些“别名号码”值中包含字母。

问题:如何使用pd.merge函数基于这两列进行合并而不出现以下错误进行连接?

“ValueError:您正在尝试合并 int64 和对象列。如果您想继续,您应该使用 pd.concat”

下面是我写的:

ePPQ_FY17_file = pd.merge(ePPQ_NoNA_Alias, FY17_NoNA_Alias, 
                          how='left', on='Alias Number',
                          left_index=False, right_index=False)

根据您的描述,我首先会尝试将 int64 列转换为字符串,然后合并。

假设 FY17_NoNA_Alias 是列 Alias Number:

具有整数 dtype 的 DataFrame
FY17_NoNA_Alias['Alias Number str'] = FY17_NoNA_Alias['Alias Number'].astype(str)
ePPQ_FY17_file = pd.merge(ePPQ_NoNA_Alias, FY17_NoNA_Alias, 
                          how='left', left_on='Alias Number',
                          right_on='Alias Number str',
                          left_index=False, right_index=False)

pd.to_numericerrors='coerce' 一起使用:

输入数据:

# ePPQ_NoNA_Alias
>>> df1
   Alias Number  Value1
0             1      10
1             2      20
2             3      30

>>> df1['Alias Number'].dtype.name
'int64'


>>> df2
  Alias Number  Value2
0            1      10
1            2      20
2            3      30
3            A      40

# FY17_NoNA_Alias
>>> df2['Alias Number'].dtype.name
'object'

你的尝试:

>>> pd.merge(df1, df2, how='left', on='Alias Number')

...
ValueError: You are trying to merge on int64 and object columns.
If you wish to proceed you should use pd.concat

因此,将第二个数据帧转换为 int64:

>>> pd.merge(
      df1,
      df2.assign(**{'Alias Number': pd.to_numeric(df2['Alias Number'], errors='coerce')}),
      on='Alias Number')

   Alias Number  Value1  Value2
0             1      10      10
1             2      20      20
2             3      30      30