在 R 中,我可以使用summary
命令快速查看缺失数据的计数,但是等效的pandas
DataFrame方法,describe
不报告这些值。
我认为我可以做点什么
len(mydata.index) - mydata.count()
计算每列的缺失值的数量,但我想知道是否有更好的习语(或者我的方法是否正确)。
答案 0 :(得分:34)
describe
和info
都会报告非缺失值的计数。
In [1]: df = DataFrame(np.random.randn(10,2))
In [2]: df.iloc[3:6,0] = np.nan
In [3]: df
Out[3]:
0 1
0 -0.560342 1.862640
1 -1.237742 0.596384
2 0.603539 -1.561594
3 NaN 3.018954
4 NaN -0.046759
5 NaN 0.480158
6 0.113200 -0.911159
7 0.990895 0.612990
8 0.668534 -0.701769
9 -0.607247 -0.489427
[10 rows x 2 columns]
In [4]: df.describe()
Out[4]:
0 1
count 7.000000 10.000000
mean -0.004166 0.286042
std 0.818586 1.363422
min -1.237742 -1.561594
25% -0.583795 -0.648684
50% 0.113200 0.216699
75% 0.636036 0.608839
max 0.990895 3.018954
[8 rows x 2 columns]
In [5]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10 entries, 0 to 9
Data columns (total 2 columns):
0 7 non-null float64
1 10 non-null float64
dtypes: float64(2)
为了得到失踪的数量,你的溶液是正确的
In [20]: len(df.index)-df.count()
Out[20]:
0 3
1 0
dtype: int64
你也可以这样做
In [23]: df.isnull().sum()
Out[23]:
0 3
1 0
dtype: int64
答案 1 :(得分:6)
作为一个微小的补充,为了让DataFrame列失去百分比,将@Jeff和@ userS的答案结合起来可以获得:
df.isnull().sum()/len(df)*100
答案 2 :(得分:3)
这不是一个完整的摘要,但它可以让您快速了解列级数据
def getPctMissing(series):
num = series.isnull().sum()
den = series.count()
return 100*(num/den)
答案 3 :(得分:1)
如果您想查看每列的非空摘要,只需使用df.info(null_counts=True)
:
示例 1:
df = pd.DataFrame(np.random.randn(10,5), columns=list('abcde'))
df.iloc[:4,0] = np.nan
df.iloc[:3,1] = np.nan
df.iloc[:2,2] = np.nan
df.iloc[:1,3] = np.nan
df.info(null_counts=True)
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 6 non-null float64
1 b 7 non-null float64
2 c 8 non-null float64
3 d 9 non-null float64
4 e 10 non-null float64
dtypes: float64(5)
memory usage: 528.0 bytes
另外,如果你想自定义结果,比如添加 nan_rate ,我写了一个方法
def describe_nan(df):
return pd.DataFrame([(i, df[df[i].isna()].shape[0],df[df[i].isna()].shape[0]/df.shape[0]) for i in df.columns], columns=['column', 'nan_counts', 'nan_rate'])
describe_nan(df)
>>> column nan_counts nan_rate
0 a 4 0.4
1 b 3 0.3
2 c 2 0.2
3 d 1 0.1
4 e 0 0.0
答案 4 :(得分:0)
我还不能发表评论,但要补充杰夫的答案,但是 如果你不关心哪些专栏有Nan的,你只想整体检查一下 只需添加第二个.sum()即可获得单个值。
result = df.isnull().sum().sum()
result > 0
一个系列只需要一个.sum()而一个Panel()需要三个
答案 5 :(得分:0)
以下一项将解决问题,并将为每一列返回空计数:
df.isnull().sum(axis=0)
df.isnull()
返回具有True / False值的数据帧
sum(axis=0)
将一列所有行中的值相加