我有以下系列文章:
my_series = pd.Series([np.nan, np.nan, ['A', 'B']])
我必须遍历my_series并评估该值是否为NaN,然后执行某些操作(为简单起见,将动作定义为“ do A”和“ do B”)。
第一次尝试:
for element in my_series:
if element.isna():
print('do A')
else:
print('do B')
运行它时,出现错误:“'float'对象没有属性'isna'”
在以下问题中进行第二次尝试:Error: float object has no attribute notnull
for element in my_series:
np.where(element.isnull(), 'do A', 'do B')
运行它时,出现错误:“ AttributeError:'float'对象没有属性'isnull'”
我在StackOverflow上没有发现任何其他类似的问题,我不知道还有什么可以尝试的。
答案 0 :(得分:1)
将代码更改为:
for element in my_series:
if type(element) == float and pd.isna(element):
print('do A')
else:
print('do B')
我故意没有改变处理源代码的原始概念 串联循环。 看起来这两个打印说明都是“占位符” 替换为 NaN 值的一段代码,而其他值的另一段代码。
答案 1 :(得分:1)
不需要显式的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')