如何使用pandas合并int64和对象



我正在尝试根据"别名编号"合并两个数据帧。两个数据框共享的列名

一个数据帧有"别名号"; ,另一个数据帧为"别名号"。值作为对象因为某些"别名号码";值中有字母

问题:我怎样使用pd ?合并函数合并基于这两列没有得到以下错误连接?

"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

最新更新