我在一个数据集中有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并保持该
的总计答案 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)