我想要找到我的数据中每一列的
NaN
数量。使用isna()
方法(或其别名isnull()
,适用于早期的pandas版本<0.21.0),然后求和计算NaN值。对于单列数据:
>>> s = pd.Series([1,2,3, np.nan, np.nan])
>>> s.isna().sum() # or s.isnull().sum() for older pandas versions
2
对于多列,这也适用:
>>> df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
>>> df.isna().sum()
a 1
b 2
dtype: int64
df
中所有缺失值的总数,可以使用 df.isnull().sum().sum()
。 - JakeCowton.sum(axis=0)
,这是默认行为。获取行和,使用.sum(axis=1)
。 - smcidf.isnull().values.sum()
- cs95df['column_name'].isna().sum()
也能起作用。 - Superdooperherodf.isna()
生成布尔系列,其中True
的数量就是NaN
的数量,而df.isna().sum()
将False
和True
相加,分别用0和1替换它们。因此,这间接地计算了NaN
,而简单的count
只会返回列的长度。 - minsdf
是一个 Pandas DataFrame。df.isnull().sum(axis = 0)
这将给出每列中NaN值的数量。
如果您需要每行中的NaN值,
df.isnull().sum(axis = 1)
isnull
已经比这个快了两倍。 - joris根据得票最多的答案,我们可以轻松定义一个函数,该函数给出一个数据框以预览每列中缺失值的情况和缺失值的百分比:
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
自从pandas 0.14.1版本起,我在这里建议增加一个关键参数以便于使用value_counts方法已被实现:
import pandas as pd
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
for col in df:
print df[col].value_counts(dropna=False)
2 1
1 1
NaN 1
dtype: int64
NaN 2
1 1
dtype: int64
如果只是在Pandas列中计算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']))
df.isnull().sum()
会给出每一列缺失值的总和。
如果您想知道特定列中缺失值的总和,则可以使用以下代码:df.column.isnull().sum()
以下内容将按降序打印所有NaN列。
df.isnull().sum().sort_values(ascending = False)
下面将按降序打印前15个Nan列。df.isnull().sum().sort_values(ascending = False).head(15)
df.isnull().sum()
//type: <class 'pandas.core.series.Series'>
或者df.column_name.isnull().sum()
//type: <type 'numpy.int64'>
如果您正在使用Jupyter Notebook,那么怎么样......
%%timeit
df.isnull().any().any()
或者 %timeit
df.isnull().values.sum()
数据中是否存在NaN,如果有,位置在哪里?
df.isnull().any()
df.info()
不会返回一个DataFrame,该方法只是打印信息。 - jorisdf.info()
即可提供每列的数据类型和非空计数。 - Rishabh