我有以下系列:
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 上没有发现任何其他类似的问题,我不知道还能尝试什么。
将您的代码更改为:
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值,另一段代码替换其他值。
不需要显式的 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)