计算 Pandas 数据框中 np.nan 的数量
Posted
技术标签:
【中文标题】计算 Pandas 数据框中 np.nan 的数量【英文标题】:Count number of np.nan in a Pandas dataframe 【发布时间】:2021-01-04 08:05:37 【问题描述】:我有一个包含 np.nan(Numpy 非数字)值的 Pandas 数据框:
field1
2020-12-24 NaN
2020-12-25 NaN
2020-12-26 1.0
2020-12-27 2.0
2020-12-28 NaN
2020-12-29 1.0
2020-12-30 2.0
(索引是日期时间。) 我想获得一个新的数据框,其中包含开始日期和 np.nan 发生的次数,即
field1
2020-12-24 2
2020-12-28 1
我试过这段代码:
prev = 1
for col_name, el in df.iterrows():
print(el)
if prev != np.nan and el[0] == np.nan:
cnt = 1
if prev == np.nan and el[0] == np.nan:
cnt = cnt + 1
if prev == np.nan and el[0] != np.nan:
print(cnt)
prev = el[0]
但它没有按预期工作,而且我想避免“for”循环,因为我希望它们在更大的数据帧上非常慢。任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:您可以通过Series.notna
和Series.cumsum
测试非缺失值来创建组,然后仅过滤NaN
s 行,然后通过Series.map
和Series.value_counts
获取计数并通过Series.duplicated
过滤第一个重复的行:
m = df['field1'].notna()
s = m.cumsum()[~m]
df1 = s.map(s.value_counts())[~s.duplicated()].to_frame()
print (df1)
field1
2020-12-24 2
2020-12-28 1
【讨论】:
【参考方案2】:你可以在列上使用isna()
的总和:
field1.isna().sum()
这相当于将列的长度减去计数(将排除NaN
's)
len(df'field1') - df.count()
因此,您可以使用以下命令计算数据库中的所有Nan
:
len(df) - df.count()
对于行,您可以使用axis=1
:
df.isna().sum(axis=1)
【讨论】:
他想要 IIUC 行中的值以上是关于计算 Pandas 数据框中 np.nan 的数量的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中创建一个函数,它将在 pandas 数据框中估算均值或中值
python 值比较判断,np.nan is np.nan 却 np.nan != np.nan ,pandas 单个数据框值判断nan