我有數據,其中我想查找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. 如何計算pandas數據框中列的非NaN值?
- 3. pandas DataFrame列中值的計數頻率
- 4. 如何計算dataframe pandas-python中的值的條件概率?
- 5. pandas dataframe:如何計算二進制列中的1行數量?
- 6. 用NaN替換Pandas DataFrame中的空列表值
- 7. 根據計算值從Pandas DataFrame中的行中查找數據?
- 8. 引用/計算Pandas中DataFrame中的前一列
- 9. Pandas中的DataFrame中的系列列表
- 10. SparkR。如何計算Spark DataFrame中所有列的不同值?
- 11. 如何使用NaN將矢量分配到pandas DataFrame中列的行子集?
- 12. 如何根據另一列中滾動函數的結果計算pandas DataFrame列的值
- 13. 如何從pandas DataFrame中提取子列?
- 14. 在Pandas DataFrame中總結列值
- 15. Pandas Dataframe:在列中設置最大值
- 16. 更改從多個列值中選擇的pandas DataFrame中的值
- 17. 刪除列表中列值的Pandas中的DataFrame行
- 18. Spark DataFrame:計算每列的不同值
- 19. 如何計算Pandas DataFrame上的滾動累積產品
- 20. 使用Groupby Pandas DataFrame手動計算STD
- 21. 在另一列中基於nan替換pandas列中的值
- 22. 計算dataframe中的空值:scala spark
- 23. Decile Pandas DataFrame列
- 24. Pandas中的Dataframe行的數據幀列
- 25. 如何將列值對齊到pandas DataFrame中另一列的特定值?
- 26. 如何在Pandas數據框中用NaN替換一系列值?
- 27. 如何在pandas中用空列表[]填充數據幀Nan值?
- 28. 如何將列值爲列表的pandas DataFrame子集?
- 29. 在Pandas中的NA和NaN列:Python
- 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