具有包含4列A、B、C、D的数据帧df,其中A、B、C列既具有空值又具有非空值。%d列只有非空值。尝试将这些列名以及每列下的非空值coverage作为单独的行输出
mylist = ['Column', 'Cov']
with open('cov.csv','w') as file:
writer = csv.writer(file)
writer.writerow(mylist)
for i in df.columns:
j = ((df[i].count())/(df['D'].count()))
writer.writerows(zip(i,j))但是,这会抛出一个TypeError: zip argument #2 must support iteration错误。应该进行哪些更改才能获得所需的输出。以下是所需的输出
Column Cov
A 0.53
B 0.2
C 0.8
D 1发布于 2020-09-30 04:05:59
我认为问题出在您的writerows和zip使用上。Zip用于可迭代,而i和j都不是可迭代的。i是列名,j是计数的计算。因此,在确定了这一点之后,我们将改用writerow。以下是基于您的描述和代码的完整示例:
df = pd.DataFrame({'A':[0.3,0.4,np.nan],'B':[0.5,np.nan,np.nan],'C':[np.nan, .23 ,.99],'D':[.2, .3, .4]})这为您提供了:

有了这个df,让我们运行您更新的代码:
mylist = ['Column', 'Cov']
with open('cov.csv','w') as file:
writer = csv.writer(file)
writer.writerow(mylist)
for i in df.columns:
numerator = df[i].count()
denominator = df['D'].count()
ratio = numerator / denominator
writer.writerow([i, ratio])然后让我们用下面的代码检查结果:
with open('cov.csv', 'r') as file:
print(file.read())csv文件的内容:
Column,Cov
A,0.6666666666666666
B,0.3333333333333333
C,0.6666666666666666
D,1.0https://stackoverflow.com/questions/64126104
复制相似问题