gpt4 book ai didi

python - 为什么我在循环 pandas 数据帧时收到此错误

转载 作者:行者123 更新时间:2023-11-30 22:29:05 25 4
gpt4 key购买 nike

我试图循环遍历数据框中的两列,并根据上述两个列值将 10 添加到新列。例如,如果 A 列 > B 列,则将 1 添加到 C 列。但是,我不断收到以下错误,但不确定原因。

ValueError: The truth value of a Series is ambiguous. Use a.empty, 
a.bool(), a.item(), a.any() or a.all().

我的代码:

for i in df.itertuples():
if df['AdjClose'] > df['30ma']:
df['position'] = 1
elif df['AdjClose'] < df['30ma']:
df['position'] = 0

最佳答案

您实际上并没有循环遍历行。在 if 语句中,条件不是 TrueFalse,而是一个系列。因此,出现错误。系列没有真假之分,它就是一个系列。编写代码的更正确方法是

for i in range(len(df)):
if df.loc[i, 'AdjClose'] > df.loc[i, '30ma']:
df.loc[i, 'position'] = 1
elif df.loc[i, 'AdjClose'] < df.loc[i, '30ma']:
df.loc[i, 'position'] = 0

一种更短、更干净、更符合 pandas 风格的代码编写方式,同时还具有运行速度更快的优点:

df.loc[df.AdjClose > df['30ma'], 'position'] = 1
df.loc[df.AdjClose < df['30ma'], 'position'] = 0

我强烈建议阅读有关索引的文档,在 pandas 中开始可能有点棘手。 https://pandas.pydata.org/pandas-docs/stable/indexing.html

编辑:请注意,for 循环代码假设您的索引由 0 到 n-1 范围内的唯一值组成。如果你有不同的索引,那就有点复杂了。请参阅https://pandas.pydata.org/pandas-docs/stable/whatsnew.html#deprecate-ix

关于python - 为什么我在循环 pandas 数据帧时收到此错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46459123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com