Python 如果所有行都包含NaN、[](空列表)或{}(空dict),则删除列
如果特定列中的所有行都是null、[](空数组)或{}(空dict),则该列将被删除。我知道Python 如果所有行都包含NaN、[](空列表)或{}(空dict),则删除列,python,pandas,dataframe,Python,Pandas,Dataframe,如果特定列中的所有行都是null、[](空数组)或{}(空dict),则该列将被删除。我知道dropna()函数,但它似乎只是在删除NA,那么空数组和空dict呢?使用where和astype(bool)来处理空容器,然后isna和all来获得一个掩码来相应地删除列 df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)] 警告:这将拾取误报,例如满是零或假的列(实际上是假值) 为了克服我提到的警告,我们可以使用select\u dty
dropna()
函数,但它似乎只是在删除NA,那么空数组和空dict呢?使用where
和astype(bool)
来处理空容器,然后isna
和all
来获得一个掩码来相应地删除列
df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)]
警告:这将拾取误报,例如满是零或假的列(实际上是假值)
为了克服我提到的警告,我们可以使用
select\u 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
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