如何使用 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_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
我正在尝试根据两个数据帧中共享的“别名编号”列名称合并两个数据帧。
一个数据框的“别名编号”值为 整数,另一个数据框的“别名编号”值为 对象,因为某些“别名号码”值中包含字母。
问题:如何使用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
:
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