<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
%%timeit
nan_dfa_loop2 = pd.DataFrame([(col, dfa[dfa[col].isna()].shape[0], dfa[dfa[col].isna()].shape[0]/dfa.shape[0]) for col in dfa.columns], columns=('Columns', 'Counts', 'NaNportions'))
# Output:
# 1 loop, best of 5: 13.9 s per loop
使用列表解析和第二个for循环来存储方法调用的结果,以减少对这些方法的调用:
%%timeit
nan_dfa_loop1 = pd.DataFrame([(col, n, n/dfa.shape[0]) for col in dfa.columns for n in (dfa[col].isna().sum(),) if n], columns=('Columns', 'Counts', 'NaNportions'))
# Output:
# 1 loop, best of 5: 373 ms per loop
8条答案
按热度按时间luaexgnf1#
describe
和info
均报告非缺失值的计数。要计算丢失的数量,您的解决方案是正确的
你也可以这么做
epfja78i2#
作为一个微小的补充,为了获得DataFrame列缺少的百分比,结合上面的@Jeff和@userS的答案可以得到:
kxe2p93d3#
下面的代码就能达到这个目的,它将返回每列的空值计数:
df.isnull().sum(axis=0)
df.isnull()
返回具有True / False值的 Dataframesum(axis=0)
对某列的所有行的值求和nlejzf6q4#
这不是一个完整的摘要,但它可以给予您快速了解列级数据
gywdnpxw5#
如果要查看每列的非空汇总,只需使用
df.info(null_counts=True)
:例一:
输出:
另外,如果您想定制结果,比如添加nan_rate,我写了一个方法
camsedfj6#
如果您不关心哪些列包含Nan的值,而只想检查整个列,只需添加第二个.sum()来获取单个值。
一个Series只需要一个。sum()和Panel()需要三个
bz4sfanl7#
我不得不处理大量的大型数据集来获取NaN信息(每列的计数和份额),而时间是一个问题。因此,我对各种方法进行了计时,以在单独的 Dataframe 中获取每列NaN的汇总计数,并将列名、NaN计数和NaN份额作为列:
用Pandas的方法只:
使用列表理解,基于来自@Mithril的精细answer:
使用列表解析和第二个for循环来存储方法调用的结果,以减少对这些方法的调用:
以上所有操作将生成相同的 Dataframe :
('Columns'对于此测试 Dataframe 是多余的。它只是用作占位符,在真实的数据集中,它可能表示初始 Dataframe 中的属性名称。)
vyu0f0g18#
我推荐使用missingno包(https://github.com/ResidentMario/missingno),它可以让你快速轻松地可视化Pandas Dataframe 中缺失的数据。