熊猫合并中的问题

我是

我在合并2个熊猫数据框时遇到问题。

a = [{'City':'CCC','ID':'BBB'},{'City':'AAA','ID':'DDD'},{'City':'CCC','ID':'HHH'}]
b = [{'City':'AAA','Name':'FFF'},{'City':'CCC','Name':'GGG'}]
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
df3 = pd.merge(df1,df2,how='left',on='City')

df1:

   City ID
0   CCC BBB
1   AAA DDD
2   CCC HHH

df2:

    City Name
0   AAA  FFF
1   CCC  GGG

df3:

    City ID     Name
0   CCC  BBB    GGG
1   AAA  DDD    FFF
2   CCC  HHH    GGG

在上面的模拟代码中,df3['Name']没有任何NaN值。但是,在我真正dataframes(我不能分享这里),相当于df3['Name']具有NaN价值,虽然它不应该因为在所有的元素df1['City']df2['City']比赛中我真正dataframes(不是这些模拟dataframes)。因此,我尝试进行故障排除并找到以下内容。

如果我尝试以下代码,

'AAA' in df1['City']

我得到False尽管它应该是True,因为'AAA'是在该列。

但是,如果我尝试以下代码,

'AAA' in sorted(df1['City'])

我得到了True,这是我所期望的。

另外,要确认,我尝试这样做:

len([x for x in df1['City'] if x not in df2['City']])

并得到的输出3,应该是0

因此,我想知道导致上述问题的原因是什么,以及对为何无法合并实际数据框的任何猜测?用于合并的列的元素是字符串。

海盗

NaN在此示例中您没有得到任何信息,因为'City'in列中的每个元素df1都在的'City'列中df2

试试这个例子

a = [
    {'City':'CCC','ID':'BBB'},
    {'City':'AAA','ID':'DDD'},
    {'City':'CCC','ID':'HHH'},
    {'City':'DDD','ID':'XXX'}
]

b = [
    {'City':'AAA','Name':'FFF'},
    {'City':'CCC','Name':'GGG'}
]

df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
df3 = pd.merge(df1,df2,how='left',on='City')
df3

  City   ID Name
0  CCC  BBB  GGG
1  AAA  DDD  FFF
2  CCC  HHH  GGG
3  DDD  XXX  NaN

您可以检查是否'AAA'df3.City

(df3.City == 'AAA').any()

True

要么

'AAA' in df3.City.tolist()

True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章