我正在尝试根据"别名编号"合并两个数据帧。两个数据框共享的列名
一个数据帧有"别名号"; ,另一个数据帧为"别名号"。值作为对象因为某些"别名号码";值中有字母
问题:我怎样使用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_numeric
和errors='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