仅在特定条件下将 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的主要内容,如果未能解决你的问题,请参考以下文章