相关文章推荐
不拘小节的排球  ·  python ...·  2 天前    · 
强悍的核桃  ·  java.lang.IllegalState ...·  1 月前    · 

如何修改循环,以便在Pandas Python中从DataFrame中的列值中获取NaN值?

0 人关注

我在Python中的代码示例如下。

for col in df.columns.tolist():
    if val in df[f"{col}"].values:
       if val.isna():
          my_list.append(col)

所以,如果我的DataFrame中的某一列包含NaN值,就把这一列的名称添加到 "my_list "中。

我知道在我的DF中,有一些列的值为NaN,但我的代码产生了空的 "my_list",可能错误在这一行。if val.isna():,我怎样才能修改它呢?我怎样才能 "告诉 "Python从列中获取NaN值?

3 个评论
Try df.columns[df.isna().sum() > 0]
MYousefi你能不能把你的解决方案落实到我的循环中,并展示一下?)
哦,对不起。那是替换了整个循环并返回列的列表。
python
pandas
numpy
for-loop
if-statement
ritendro
ritendro
发布于 2022-08-02
3 个回答
INGl0R1AM0R1
INGl0R1AM0R1
发布于 2022-08-02
0 人赞同

只需使用像这样的if col语句

for col in df.columns.tolist():
    if val in df[f"{col}"].values:
       if col == False:
          my_list.append(col)

我不是在给你最好的方法,只是在修正你的小名单循环

Orange
Orange
发布于 2022-08-02
0 人赞同

通过迭代列中的值,将列名添加到my_list中,然后断开,你会得到这个。

my_list = ['col1','col3']

My code:

import pandas as pd
from numpy import NaN
df = pd.DataFrame(data={
    "col1":[10,2.5,NaN],
    "col2":[10,2.5,3.5],
    "col3":[5,NaN,1]})
my_list = []
for col in df.columns:
    for val in df[col].values:
        if pd.isna(val):
            my_list.append(col)
            break
print(f"{my_list=}")
    
使用你的代码,我有一个问题,因为:有多少列名出现,就有多少南,我可以做什么?
我试着在col3中加入另一个NaN,但没有得到和你一样的结果。总之,我建议使用MYousefi的,因为它可以做同样的事情,而不需要在列中循环取值。
MYousefi
MYousefi
发布于 2022-08-02
0 人赞同

你可以通过@Orange提到的修改来修复你的代码。我只是把这个作为一个备选方案。当处理数据时,你想让数据库/数据分析软件来做繁重的工作。在游标上循环是你应该尽量避免的。

你的代码可以改成。

for col in df.columns:
    if df[col].hasnans:
        my_list.append(col)

下面的代码在功能上做了同样的事情。