Pandas df.isnull()。all()计数多个文件

时间:2016-10-06 23:40:03

标签: python pandas

我在一个数据集中有2000个csv文件,每个文件有88列:

      filenames = glob.glob('path\*.csv') 
       for f in filenames:            
          df = pd.read_csv(f, error_bad_lines = False)
          df = df.isnull().all()

这将返回一个包含列标题的系列,如果缺少整个列,则返回True。如何计算整个数据集(2000个csv文件)中的Trues数量(完全缺少列数),以便我可以表示每个文件丢失多少数据?

如果每个文件缺少整个列,我想添加1并保持该

的总计

1 个答案:

答案 0 :(得分:1)

您表达的方式,您获得每个数据集的缺失列数。

但是,您可以获取每列缺失的行数,您可以修改该代码并调用它:

df.isnull().sum()

将产生每列丢失行数。类似的东西:

column1 0 column2 0 column3 171 column4 798 column5 0 dtype: int64

再次简单地调用.sum()将为您提供缺失观察的总和。

数据框中的单元格总数将等于列乘以行,您可以通过调用它来计算:

df.shape[0]*df.shape[1]

这意味着你可以通过调用它来计算缺失的百分比:

total = df.shape[0]*df.shape[1]
missing = df.isnull().sum().sum()
percent = missing/float(total)

只需将这些值附加到列表中,以便稍后保存它们以供参考。尝试这样的事情:

 misscount = [] 
 for f in filenames:            
      df = pd.read_csv(f, error_bad_lines = False)
      total = df.shape[0]*df.shape[1]
      missing = df.isnull().sum().sum()
      percent = missing/float(total)
      misscount.append(percent)

编辑:

根据评论中的反馈:

" ....我确实希望每个整个数据集中缺少列数(2000个csv文件)....所以如果缺少整个列,我想要添加一个"缺少变量"和你的一样,然后除以整个数据集的长度(2000)。"

因此,为了计算给定csv文件的总列数,可以这样称呼:

total =len(df.columns)

为了计算每个csv文件的缺失列总数,您可以调用:

missing = df.isnull().all().sum()

因此,每个csv文件的缺失列百分比可以这样计算:     百分比=缺失/浮动(总计)

但听起来你想要一个正在运行的记录。所以让我们使用这个循环:

colcount = 0
misscount = 0

for f in filenames:            
      df = pd.read_csv(f, error_bad_lines = False)
      colcount +=len(df.columns)
      misscount += df.isnull().all().sum()

percent = misscount/float(colcount)