Python 将NaN替换为'-';仅在特定条件下签名,请参见
我有一个数据帧Python 将NaN替换为'-';仅在特定条件下签名,请参见,python,python-3.x,pandas,dataframe,python-2.7,Python,Python 3.x,Pandas,Dataframe,Python 2.7,我有一个数据帧 L1 D1 L2 D2 L3 1.0 ABC 1.1 4.1 NaN NaN NaN 1.7 NaN NaN NaN 4.1 NaN NaN NaN NaN 1.8 3.2 PQR NaN NaN NaN 1.6 NaN NaN 我想用“-”替换
L1 D1 L2 D2 L3
1.0 ABC 1.1 4.1 NaN
NaN NaN 1.7 NaN NaN
NaN 4.1 NaN NaN NaN
NaN 1.8 3.2 PQR NaN
NaN NaN 1.6 NaN NaN
我想用“-”替换所有NaN(仅当任何列中的值是该行的最后一个值时)
所以基本上我想要的输出是
L1 D1 L2 D2 L3
1.0 ABC 1.1 4.1 -
NaN NaN 1.7 - -
NaN 4.1 - - -
NaN 1.8 3.2 PQR -
NaN NaN 1.6 - -
有人能帮忙吗,先谢谢你 这里有一种方法:
minus_mask = df.loc[:, ::-1].notna().cumsum(axis=1).eq(0)
out = df.mask(minus_mask, "-")
我们首先在列上翻转df
,查看它不是NaN
的地方,然后取累积和。如果累计和等于0,这些地方就是我们应该放在那里的-,所以我们用方法把减号放在那里
得到
>>> out
L1 D1 L2 D2 L3
0 1.0 ABC 1.1 4.1 -
1 NaN NaN 1.7 - -
2 NaN 4.1 - - -
3 NaN 1.8 3.2 PQR -
4 NaN NaN 1.6 - -
由于我也有非数值的值,我们得到了这个错误
TypeError:无法在混合类型上使用非np.nan值进行布尔设置
@sdave我明白了,那么我们可以使用pd.DataFrame.mask
方法,编辑答案,希望对您有所帮助。非常感谢。如果可以的话,我想在linkedIn上与你联系/关注你:)@s我很高兴能为你提供帮助!但是我不使用那个网站(我有另一个要求你