#方法1
#筛选全为0的行,得到的 df 不含全为0的行
df = df.loc[~(df==0).all(axis=1)]
#筛选不全为0的行,得到的 df 都是全为0的行
df.loc[(df==0).all(axis=1)]
df.loc[(df!=0).any(1)]
实例
df 数据集
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': ['A', 'C', 'B', 'D', 'C', 'B', 'B', 'A', 'D'],
'num': [np.nan, 23, np.nan, 54, 0, 1, 8, 9, 12],
'a': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})
df
Out[3]:
x num a
0 A NaN NaN
1 C 23.0 NaN
2 B NaN NaN
3 D 54.0 NaN
4 C 0.0 NaN
5 B 1.0 NaN
6 B 8.0 NaN
7 A 9.0 NaN
8 D 12.0 NaN
查找存在0或全是0的列并返回列名
- df 中存在 0 的列名
df.loc[:, (df == 0).any()].columns
Out[4]: Index(['num'], dtype='object')
- df 中全是 0 的 列名
df.loc[:, (df == 0).all()].columns
Out[5]: Index([], dtype='object')
缺失值查找、处理
- 取出 df 中
全是
缺失值的列
df.loc[:, df.isnull().all()].columns
Out[6]: Index(['a'], dtype='object')
- 取出 df 中
存在
缺失值的列
df.loc[:, df.isnull().any()].columns
Out[7]: Index(['num', 'a'], dtype='object')
- 用 python 中自带函数对 df 的缺失值删除处理。
df.dropna(axis=0) # 删除df中存在缺失值的行
df.dropna(axis=1) # 删除df中存在缺失值的列
df.fillna(0) # 将所有缺失值填补为0
- 剔除 df,num 列中为空值的行
df.loc[df['num'].notnull(), :]
Out[13]:
x num a
1 C 23.0 NaN
3 D 54.0 NaN
4 C 0.0 NaN
5 B 1.0 NaN
6 B 8.0 NaN
7 A 9.0 NaN
8 D 12.0 NaN