如果特定列中的所有行均为null,[](空数组)或{}(空字典),则该列将被删除。我知道square2
函数,但似乎只删除了NA,空数组和空dict呢?
答案 0 :(得分:1)
使用where
和astype(bool)
处理空容器,然后使用isna
和all
得到一个掩码,以相应地删除列。
df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)]
注意:这将获取误报,例如充满零的列或False(有效地是虚假的值)。
df = pd.DataFrame({'A': [np.nan, [], {}], 'B': range(3), 'C': [1, 2, np.nan]})
df
A B C
0 NaN 0 1.0
1 [] 1 2.0
2 {} 2 NaN
df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)]
B C
0 0 1.0
1 1 2.0
2 2 NaN
要克服我提到的警告,我们可以使用select_dtypes
仅选择对象列,然后重复该过程并在最后调用drop
。
df = pd.DataFrame({
'A': [np.nan, [], {}],
'B': range(3),
'C': [1, 2, np.nan],
'D': 0
})
df
A B C D
0 NaN 0 1.0 0
1 [] 1 2.0 0
2 {} 2 NaN 0
u = df.select_dtypes(object)
df.drop(u.columns[u.where(u.astype(bool)).isna().all(axis=0)], axis=1)
B C D
0 0 1.0 0
1 1 2.0 0
2 2 NaN 0