Python 3.x 使用python将NaN值替换为另一个数据帧

Python 3.x 使用python将NaN值替换为另一个数据帧,python-3.x,pandas,Python 3.x,Pandas,我在用不同索引长度的另一个数据帧替换一个数据帧中NaN值的到期日期列时遇到了一些困难 示例数据df1: SOH Price Value Expiry Comments 0 1P 10.49 10.49 NaN NaN 1 220 7.55 16.61 NaN NaN 用df2替换到期列: SOH Price Value Expiry Com

我在用不同索引长度的另一个数据帧替换一个数据帧中NaN值的到期日期列时遇到了一些困难

示例数据df1:

    SOH     Price     Value  Expiry  Comments  
0    1P     10.49     10.49     NaN       NaN  
1   220      7.55     16.61     NaN       NaN  
用df2替换到期列:

    SOH     Price     Value    Expiry  Comments  
1    1P      6.22      6.22     NaN       NaN  
2    61     17.65     10.77     NaN       NaN  
3    1P     11.99     11.99     NaN       NaN  
4    2P     54.45    108.90     NaN       NaN  
5    1P     10.49     10.49     May-17       NaN  
6   220      7.55     16.61     June-18       NaN 
因此,新的数据帧可能具有不同的顺序和索引,但列保持不变

我希望实现df1输出为:
SOH价格值到期评论
0 1P 10.49 10.49 5月17日NaN
1820年6月18日7.55 16.61南

我试过:

  • df1.fillna(df2)
  • df1.更新(df2)
  • df1.loc[df1['Expiry'].isnull(),'Expiry']= df1['Expiry'].map(df2.Expiry)
  • 具有3个参数的正向循环
  • 合并
  • 内连接

但是还没有运气:(任何帮助都将不胜感激!

加入
['SOH','Price','Value']
然后
fillna

cols = ['SOH', 'Price', 'Value']
d2 = df2.set_index(cols).Expiry.dropna()
df1.fillna(df1.drop('Expiry', 1).join(d2, on=cols))

   SOH  Price  Value   Expiry Comments
0   1P  10.49  10.49   May-17      NaN
1  220   7.55  16.61  June-18      NaN

是否根据SOH列进行替换?不,我需要价格和值匹配,以防其他SOH看起来与快速响应相同,但奇怪的是“d2=df2.set_index(cols.Expiry.dropna()”给我AttributeError:'DataFrame'对象没有属性'Expiry',则您的列名与您想象中的列名不同。设置索引(cols)我的打印(d2)变为:空DataFrame列:[索引:[105、22.92、40.11、nan、nan等],任何指向我做错了什么的指针?看起来它只是将所有内容都设置到索引中,列中没有值。您是否使用了
cols=['SOH','Price','Value']
?print(df2.columns)`说什么?是的,我按照您的建议做了,print(d2.columns)给出:index(['SOH','Price','Value','expiration','Comments']),dtype='object),d1列也给出了相同的结果