基于if语句的for循环,错误消息= Series的真值不明确[重复]

Posted

技术标签:

【中文标题】基于if语句的for循环,错误消息= Series的真值不明确[重复]【英文标题】:For loop based on a if statement, error message= The truth value of a Series is ambiguous [duplicate] 【发布时间】:2019-08-13 05:44:13 【问题描述】:

我的数据框如下所示:

    mid price   dse_high_born
0   0.002039    False
1   0.002039    False
2   0.002039    False
3   0.002039    False
4   0.002039    False
5   0.002038    False
6   0.002039    True
7   0.002037    False
8   0.002037    False
9   0.002037    False
10  0.002036    False
11  0.002036    False
12  0.002038    False
13  0.002038    False
14  0.002038    False
15  0.002038    False
16  0.002039    False
17  0.002039    False
18  0.002040    False
19  0.002040    False
20  0.002040    False
21  0.002039    False
22  0.002039    False
23  0.002039    False
24  0.002040    True
25  0.002040    False
26  0.002041    False
27  0.002041    False
28  0.002041    False
29  0.002042    False
30  0.002044    False
31  0.002049    True
32  0.002049    False
33  0.002048    False

... ...

我尝试使用 for 循环根据以下条件添加新列 price

for index, row in df.iterrows():
    if df['dse_high_born'] == True:
        df.at[index,'price'] = row['mid price']
    else:
        df.at[index,'price'] = 'nan'

我收到以下错误:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我尝试了所有组合(使用 bool()、any()、item() 等),但是当我执行以下请求时 df[df['price'] != 'nan'] 在这种情况下我的数据框中没有任何内容,知道为什么吗?谢谢!

【问题讨论】:

【参考方案1】:

这可以使用np.where以更简单有效的方式完成:

import numpy as np
df['price'] = np.where(df.dse_high_born, df.mid_price, np.nan)

    mid_price  dse_high_born  price
0       0.002          False    NaN
1       0.002          False    NaN
2       0.002          False    NaN
3       0.002          False    NaN
4       0.002          False    NaN
5       0.002          False    NaN
6       0.002           True  0.002
7       0.002          False    NaN
...

您的代码的问题在于,在if 语句中,当检查条件df['dse_high_born'] == True: 时,您不是在特定行上编制索引,而是在整个列上编制索引。您需要使用.locdf.loc[index,'dse_high_born'] 对行和列进行索引。所以你想要这样的东西:

for index, row in df.iterrows():
    if df.loc[index,'dse_high_born'] == True:
        df.loc[index,'price'] = df.loc[index,'mid_price']
    else:
        df.loc[index,'price'] = np.nan

【讨论】:

【参考方案2】:

错误是指df['dse_high_born'] == True。我觉得应该换成这样的行?

for index, row in df.iterrows():
if row['dse_high_born'] == True:
    df.at[index,'price'] = row['mid price']
else:
    df.at[index,'price'] = 'nan'

【讨论】:

以上是关于基于if语句的for循环,错误消息= Series的真值不明确[重复]的主要内容,如果未能解决你的问题,请参考以下文章

高效的 if 语句 / for 循环

For 循环首先打印 if-else 语句的错误分支

for,if循环语句可以不带大括号吗?在可以不带的情况下我的循环有错误吗?

错误打破了for循环:条件try语句?

我可以将 for 循环集成到检查数组中是不是存在数字的 if 语句中吗?

MATLAB for循环内if语句判断失败