仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas

Posted

技术标签:

【中文标题】仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas【英文标题】:replace NaN with '-' sign only in specefic condition ,Python-Pandas 【发布时间】:2021-08-27 06:00:30 【问题描述】:

我有一个数据框

 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     -          -

谁能帮忙,提前谢谢!

【问题讨论】:

【参考方案1】:

这是一种方法:

minus_mask = df.loc[:, ::-1].notna().cumsum(axis=1).eq(0)
out = df.mask(minus_mask, "-")

我们首先将df 翻转到列上,看看它不是NaN 的位置并获取累积和。如果累积和等于0,那些地方应该放"-",所以我们使用mask方法放减号,

得到

>>> 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: Cannot do inplace boolean setting on mixed-types with a non np.nan value @sdave 我明白了,那么我们可以使用pd.DataFrame.mask 方法,编辑答案,希望对您有所帮助。 像魅力一样工作,非常感谢。如果可以的话,我想在linkedIn上联系/关注你:) @sdave 很高兴为您提供帮助!但我不使用那个网站:) 我还有另一个请求;)***.com/questions/67921612/…

以上是关于仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas的主要内容,如果未能解决你的问题,请参考以下文章

将数据框特定列中的 Nan 值替换为另一个数据框特定列中的值

满足某些条件时将值替换为 NaN 或 Inf

尝试在特定条件下将行合并为一行

将最后一个有效索引替换为特定值

对行编号并在特定条件下将计数器重置为 1

在存在 NaN 的情况下将 pandas 列拆分为新列