我有数据,其中我想查找NaN
的数字,以便如果它小于某个阈值,我将删除这些列。我看了看,但没有找到任何功能。有value_counts
,但对我来说会很慢,因为大多数值是不同的,我只需要计数NaN
。如何计算Pandas DataFrame中的列中的NaN值
144
A
回答
40
279
您可以使用isnull()
方法,然后求和以计算nan值。对于一列:
In [1]: s = pd.Series([1,2,3, np.nan, np.nan])
In [4]: s.isnull().sum()
Out[4]: 2
几列,它也可以工作:
In [5]: df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
In [6]: df.isnull().sum()
Out[6]:
a 1
b 2
dtype: int64
19
14
如果您使用的是Jupyter笔记本,那么......
%%timeit
df.isnull().any().any()
或
%timeit
df.isnull().values.sum()
,或者是否有任何地方的NaN中的数据,如果有,在哪里?
df.isnull().any()
14
基于最投票的答案,我们可以很容易地定义一个函数,给了我们一个数据帧预览缺失值,并在每一列的缺失值%:
def missing_values_table(df):
mis_val = df.isnull().sum()
mis_val_percent = 100 * df.isnull().sum()/len(df)
mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
mis_val_table_ren_columns = mis_val_table.rename(
columns = {0 : 'Missing Values', 1 : '% of Total Values'})
mis_val_table_ren_columns = mis_val_table_ren_columns[
mis_val_table_ren_columns.iloc[:,1] != 0].sort_values(
'% of Total Values', ascending=False).round(1)
print ("Your selected dataframe has " + str(df.shape[1]) + " columns.\n"
"There are " + str(mis_val_table_ren_columns.shape[0]) +
" columns that have missing values.")
return mis_val_table_ren_columns
9
如果只是算nan值在这里是一个快速的方式
import pandas as pd
## df1 as an example data frame
## col1 name of column for which you want to calculate the nan values
sum(pd.isnull(df1['col1']))
0
在我的代码中使用@sushmit提出的解决方案。
相同的一个可能的变型也可以是
colNullCnt = []
for z in range(len(df1.cols)):
colNullCnt.append([df1.cols[z], sum(pd.isnull(trainPd[df1.cols[z]]))])
优势的是,它返回每个在DF从此列的结果。
1
您可以使用基于value_counts到已给出了答案np.nan
s.value_counts(dropna = False)[np.nan]
1
的方法和打印价值观和一些改进,这是我的做法
def PercentageMissin(Dataset):
"""this function will return the percentage of missing values in a dataset """
if isinstance(Dataset,pd.DataFrame):
adict={} #a dictionary conatin keys columns names and values percentage of missin value in the columns
for col in Dataset.columns:
adict[col]=(np.count_nonzero(Dataset[col].isnull())*100)/len(Dataset[col])
return pd.DataFrame(adict,index=['% of missing'],columns=adict.keys())
else:
raise TypeError("can only be used with panda dataframe")
相关问题
- 1. pandas DataFrame列中值的计数频率
- 2. 如何计算dataframe pandas-python中的值的条件概率?
- 3. pandas dataframe:如何计算二进制列中的1行数量?
- 4. 用NaN替换Pandas DataFrame中的空列表值
- 5. 根据计算值从Pandas DataFrame中的行中查找数据?
- 6. SparkR。如何计算Spark DataFrame中所有列的不同值?
- 7. 如何根据另一列中滚动函数的结果计算pandas DataFrame列的值
- 8. Pandas Dataframe:在列中设置最大值
- 9. 如何从pandas DataFrame中提取子列?
- 10. 更改从多个列值中选择的pandas DataFrame中的值
- 11. Spark DataFrame:计算每列的不同值
- 12. 如何计算Pandas DataFrame上的滚动累积产品
- 13. 计算dataframe中的空值:scala spark
- 14. 使用Groupby Pandas DataFrame手动计算STD
- 15. 如何将列值对齐到pandas DataFrame中另一列的特定值?
- 16. Decile Pandas DataFrame列
- 17. Pandas中的Dataframe行的数据帧列
- 18. 如何在pandas中用空列表[]填充数据帧Nan值?
- 19. 在Pandas中的NA和NaN列:Python
- 20. 如何将列值为列表的pandas DataFrame子集?
- 21. 拆分Pandas DataFrame中的列表
- 22. 根据Pandas DataFrame中的值将行值复制到相邻列
- 23. 使用List Comprehension(Pandas)从DataFrame列表中删除DataFrame的列
- 24. 如何用计算的CAGR值替换NaN列
- 25. Python Pandas Dataframe:使用列中的值创建新列
- 26. 根据其他列中的值将列添加到Python pandas DataFrame
- 27. 从DataFrame中选择CONSECUTIVE行,根据Pandas与Groupby列中的值
- 28. 返回NaN值在计算指数加权移动平均-Pandas
- 29. pandas dataframe .loc行值
- 30. Pandas DataFrame列的掩码
事实上,最好的一次。这取决于我认为的帧的大小,对于更大的帧(3000行),使用'isnull'的速度已经快了两倍。 – joris 2014-10-08 21:12:10
在我计算群体长度大于4的情况下,我尝试了两种方法,并且joris'df.isnull()。sum()的速度至少快了20倍。这是0.17.1。 – 2016-03-16 16:49:07