首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列标题和每列下的非空值覆盖率作为单独的行输出

将列标题和每列下的非空值覆盖率作为单独的行输出
EN

Stack Overflow用户
提问于 2020-09-30 03:09:36
回答 1查看 20关注 0票数 0

具有包含4列A、B、C、D的数据帧df,其中A、B、C列既具有空值又具有非空值。%d列只有非空值。尝试将这些列名以及每列下的非空值coverage作为单独的行输出

代码语言:javascript
复制
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错误。应该进行哪些更改才能获得所需的输出。以下是所需的输出

代码语言:javascript
复制
Column  Cov
A   0.53
B   0.2
C   0.8
D   1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 04:05:59

我认为问题出在您的writerowszip使用上。Zip用于可迭代,而ij都不是可迭代的。i是列名,j是计数的计算。因此,在确定了这一点之后,我们将改用writerow。以下是基于您的描述和代码的完整示例:

代码语言:javascript
复制
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,让我们运行您更新的代码:

代码语言:javascript
复制
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])

然后让我们用下面的代码检查结果:

代码语言:javascript
复制
with open('cov.csv', 'r') as file:
    print(file.read())

csv文件的内容:

代码语言:javascript
复制
Column,Cov
A,0.6666666666666666
B,0.3333333333333333
C,0.6666666666666666
D,1.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64126104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档