python - 如何从多列中删除包括 0 在内的所有正数并使用 pandas 保留行?
问题描述
假设我有这样的df,
column1 column2 column3 column4
0 ab A -1.0 32
1 ab B -99.0 NaN
2 ab A -4.0 NaN
3 ab B 0.0 21
4 cd A NaN -998
5 cd B 12.0 -250
是否有一种通用方法可以在不硬编码列名的情况下从 df 中删除包括 0 在内的所有正数?
我尝试了以下方法,
df.mask(df[['column3', 'column4']].ge(0))
我可以删除包括 0 在内的正数,但同时释放 column1 和 column2 的其余数据。
我想保留 column1 和 column2 的数据,同时还用 NaN 删除/替换它所有正数,包括 df 中的 0
最终df,
column1 column2 column3 column4
0 ab A -1.0 NaN
1 ab B -99.0 NaN
2 ab A -4.0 NaN
3 ab B NaN NaN
4 cd A NaN -998
5 cd B NaN -250
解决方案
我们可以使用DataFrame.select_dtypes
withDataFrame.mask
仅将您的逻辑应用于数字列:
dfn = df.select_dtypes('number')
df[dfn.columns] = dfn.mask(dfn.ge(0))
column1 column2 column3 column4
0 ab A -1.0 NaN
1 ab B -99.0 NaN
2 ab A -4.0 NaN
3 ab B NaN NaN
4 cd A NaN -998.0
5 cd B NaN -250.0
推荐阅读
- java - System.out.println() 更改单线程程序中变量的值
- laravel - vuejs 在数据结果中循环而不是我有多少字段
- python - Python调用内部函数
- java - 网络:如何创建一个允许多个用户相互交谈的服务器
- r - 为什么在 R 中制作线性多项式模型时需要 I()“AsIs”?
- java - Java:PrintWriter 未写入文件
- c# - 如何在 Hostgator 上托管 ASP.NET MVC 网站
- python - 类型错误:strptime() 参数 1 必须是 str,而不是列表
- excel - 在 Word 宏中返回 Excel 行
- javascript - 就时间效率而言,在 store(model) 和 class 中存储状态有什么区别?