python - 如何将pandas.DataFrame.dropna应用于inplace = True和axis = 1的列子集?
问题描述
import pandas as pd
df = pd.DataFrame({
'col1': [99, None, 99],
'col2': [4, 5, 6],
'col3': [7, None, None]})
col_list = ['col1', 'col2']
df[col_list].dropna(axis=1, thresh=2, inplace = True)
这将返回一个警告并保持数据框不变:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
以下不会产生警告,但仍保持 DataFrame 不变。
df.loc[:,col_list].dropna(axis=1, thresh=2, inplace=True)
问题:
- 从用户指定的列列表中,从数据框中删除那些具有小于“thresh”非空值的列。对不在列表中的列不做任何更改。
- 我需要使用 inplace=True 来避免复制数据框,因为它很大
我无法遍历列并一次应用 dropna 一列,因为 pandas.Series.dropna 没有“thresh”参数。
解决方案
有趣的是,dropna
不支持此功能,但有一个解决方法。
v = df[col_list].notna().sum().le(2) # thresh=2
df.drop(v.index[v], axis=1, inplace=True)
顺便一提,
我需要使用 inplace=True 来避免复制数据框
很遗憾地通知您,即使使用inplace=True
,也会生成一个副本。唯一的区别是副本被原地分配回原始对象,因此不会返回新对象。
推荐阅读
- java - 为什么即使在新事务上运行@transactional 也会回滚?
- angular - 在 IE11 中使用 `ViewEncapsulation.ShadowDom work` 执行 Angular Elements
- r - R中的分组和数据透视表
- java - ElasticSearch 使字段不可从 java 中搜索
- javascript - 如何从复选框列表中返回所有选中和未选中的值?
- ruby-on-rails - Rails 中的 ActionDispatch::Cookies::CookieOverflow
- node.js - 导出的 Docker 镜像 tar 在提取和重新创建后不完全相同
- docker-compose - Apache Druid 无法连接到 zookeeper,Apache Druid 作为 docker 镜像部署在一个容器中
- r - 解析采访文本
- css - Conseguir que el thead de la tabla se quede stycky