'The truth value of a Series is ambiguous' - 熊猫



我试图比较panda中两列之间的股价数据,但一直收到这个错误。

"序列的真值不明确。使用a.empty、a.bool((、a.item((、.any((或.all((。'

for n in df['labels']:
if df['Open'] > df['Close']:
df['labels'] = 'green'
else:
df['labels'] = 'red'

问题是这一行-'f df['Open']>df['Close']'

尝试使用.gt((方法,但没有成功-有什么建议吗?

您正在将两整列相互比较,这是不确定的。

相反,您想要做的是比较数据帧中每一行的值。

示例df:

df = pd.DataFrame(columns=['open', 'close'], data=[[100, 105], [200, 195], [300, 301], [400, 404], [500, 499]])

例如,您可以像这样使用.itertuples((:

for row in df.itertuples():
print(row.close > row.open)

然而,数据帧的美妙之处在于,您可以同时计算多个值,并且通常不想在数据上循环。

df['labels'] = df.apply(lambda row: 'green' if row["close"] >= row["open"] else 'red', axis=1)

在这里,我创建了一个新的"标签"列,并根据打开和关闭的值将值设置为"绿色"或"红色">

最后的df看起来是这样的:

open  close labels
0   100    105  green
1   200    195    red
2   300    301  green
3   400    404  green
4   500    499    red

第三种选择是像这样使用np.where

import numpy as np
df['labels'] = np.where(df["close"] >= df["open"], 'green', 'red')

相关内容

最新更新