Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将NaN替换为'-';仅在特定条件下签名,请参见_Python_Python 3.x_Pandas_Dataframe_Python 2.7 - Fatal编程技术网

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我很高兴能为你提供帮助!但是我不使用那个网站(我有另一个要求你