基于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:
时,您不是在特定行上编制索引,而是在整个列上编制索引。您需要使用.loc
、df.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的真值不明确[重复]的主要内容,如果未能解决你的问题,请参考以下文章
for,if循环语句可以不带大括号吗?在可以不带的情况下我的循环有错误吗?