如何计算python中每列中的丢失数据?

时间:2018-10-18 00:28:02

标签: python

我有一个包含85列的大型数据框。丢失的数据已被编码为NaN。我的目标是获取每一列中丢失的数据量。因此,我编写了一个for循环来创建一个列表以获取金额。但这行不通。

以下是我的代码:

headers = x.columns.values.tolist() 
nans=[]
for head in headers:
    nans_col = x[x.head == 'NaN'].shape[0]
    nan.append(nans_col)

我尝试使用循环中的代码,通过将head更改为该列的名称来生成特定列的缺失值,然后代码工作并为我提供了该列中的缺失数据量。

所以我不知道如何纠正for循环代码。有人可以帮助我吗?非常感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

对于pandas(Python数据分析库)中的列,您可以使用:

In [3]: import numpy as np
In [4]: import pandas as pd
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

对于单列或Sereis,您可以计算缺失值,如下所示:

In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: s = pd.Series([1,2,3, np.nan, np.nan])

In [4]: s.isnull().sum()
Out[4]: 2

Reference

答案 1 :(得分:0)

如果有多个数据框 下面是用百分比计算每列中缺失值的数量的功能

缺少数据分析

def miss_data(df):
    x = ['column_name','missing_data', 'missing_in_percentage']
    missing_data = pd.DataFrame(columns=x)
    columns = df.columns
    for col in columns:
        icolumn_name = col
        imissing_data = df[col].isnull().sum()
        imissing_in_percentage = (df[col].isnull().sum()/df[col].shape[0])*100

        missing_data.loc[len(missing_data)] = [icolumn_name, imissing_data, imissing_in_percentage]
    print(missing_data) 

答案 2 :(得分:0)

这将为您提供按列名计数的缺失值的数量(打印为True,然后计数)

missing_data = df.isnull()
for column in missing_data.columns.values.tolist():
    print(column)
    print(missing_data[column].value_counts())
    print("")

答案 3 :(得分:0)

#function to show the nulls total values per column
colum_name = np.array(data.columns.values)
def iter_columns_name(colum_name):
  for k in colum_name:
    print("total nulls {}=".format(k),pd.isnull(data[k]).values.ravel().sum())

#call the function
iter_columns_name(colum_name)

#outout
total nulls start_date= 0
total nulls end_date= 0
total nulls created_on= 0
total nulls lat= 9925
.
.
.

答案 4 :(得分:0)

只需使用Dataframe.info,非空计数可能就是您想要的,甚至更多。

>>> pd.DataFrame({'a':[1,2], 'b':[None, None], 'c':[3, None]}) \
.info(verbose=True, null_counts=True)

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   a       2 non-null      int64    
 1   b       0 non-null      object
 2   c       1 non-null      float64
dtypes: float64(1), int64(1), object(1)
memory usage: 176.0+ bytes