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)
问题:
因为pandas.Series.dropna没有'thresh'参数,所以我无法循环遍历这些列并一次仅将dropna应用于一列。
答案 0 :(得分:1)
有趣的是,dropna
不支持此功能,但是有一种解决方法。
v = df[col_list].notna().sum().le(2) # thresh=2
df.drop(v.index[v], axis=1, inplace=True)
顺便
我需要使用inplace = True以避免复制数据框
很抱歉通知您,即使使用inplace=True
,也会生成一个副本。唯一的区别是,副本将原位分配回原始对象,因此不会返回新对象。
答案 1 :(得分:0)
我认为问题是df['col_list']
或切片会创建新的df,并且对该df而不是原始df产生inplace=True
效果。
您可能必须使用subset
的{{1}}参数并将列列表传递给它。
dropna