错误:'float' 对象没有属性 'isna'"

asa*_*asa 7 python pandas

我有以下系列:

my_series = pd.Series([np.nan, np.nan, ['A', 'B']])
Run Code Online (Sandbox Code Playgroud)

我必须遍历 my_series 并评估该值是否为 NaN,然后​​执行某些操作(为简单起见,将操作定义为“执行 A”和“执行 B”)。

第一次尝试:

for element in my_series:
    if element.isna():
        print('do A')
    else:
        print('do B')
Run Code Online (Sandbox Code Playgroud)

运行它时,出现错误:“'float' 对象没有属性 'isna'”

从问题第二次尝试错误:浮动对象没有属性notnull

for element in my_series:
    np.where(element.isnull(), 'do A', 'do B')
Run Code Online (Sandbox Code Playgroud)

运行它时,出现错误:“ AttributeError: 'float' object has no attribute 'isnull'

我在 StackOverflow 上没有发现任何其他类似的问题,我不知道还能尝试什么。

Val*_*_Bo 7

将您的代码更改为:

for element in my_series:
    if type(element) == float and pd.isna(element):
        print('do A')
    else:
        print('do B')
Run Code Online (Sandbox Code Playgroud)

根据彼得的评论进行编辑

我故意没有改变在循环中处理源系列的原始概念。看起来两个打印指令都是“占位符”,用一段代码替换NaN值,另一段代码替换其他值。


Pet*_*ler 6

不需要显式的 for 循环。根据您的第二次尝试:

# Setup
my_series = pd.Series([np.nan, np.nan, ['A', 'B']])

# Solution
np.where(my_series.isnull(), 'do A', 'do B')                                              

# Output
array(['do A', 'do A', 'do B'], dtype='<U4')
Run Code Online (Sandbox Code Playgroud)