我在合并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] 删除。
我来说两句