【问题标题】:ValueError: Can only compare identically-labeled Series objects | comparing values from dataframeValueError:只能比较标记相同的系列对象 |比较数据框中的值
【发布时间】:2019-02-23 13:57:59
【问题描述】:

我正在尝试从不断更新的数据框中比较值(都是浮点数)。

在这里,我将每个值从主要数据帧中分离出来:

if len(dfC) >= 3:

O = pd.DataFrame(dfO.tail(3))
O1 = (O.iloc[-1])
O2 = (O.iloc[-2])
O3 = (O.iloc[-3])

H = pd.DataFrame(dfH.tail(3))
H1 = (H.iloc[-1])
H2 = (H.iloc[-2])
H3 = (H.iloc[-3])

L = pd.DataFrame(dfL.tail(3))
L1 = (L.iloc[-1])
L2 = (L.iloc[-2])
L3 = (L.iloc[-3])

C = pd.DataFrame(dfC.tail(3))
C1 = (C.iloc[-1])
C2 = (C.iloc[-2])
C3 = (C.iloc[-3])

这是我试图将它们相互比较的地方:

if (O2 <= C3) & (L2 >= O3) & (L1 >= C2) & (C1 >= O2):
    print("message")

elif (L2 >= C3) & (H2 <= O3) & (H1 <= C2) & (C1 <= O2):
    print("message")

但是我得到“ValueError:只能比较标签相同的系列对象”。提前非常感谢,这让我现在很困惑!

【问题讨论】:

  • 不看数据就很难说什么(你能分享样本吗?),但它可能想使用相同的索引。为什么需要将子集转换为数据框?您可以尝试使用 .values 属性(例如 df0.tail(3) )仅获取值
  • @nocibambi 股票的数据是开盘价、最高价、最低价、收盘价。所以它们都是数字,即。像'3840.5'
  • 在这种情况下,问题的根源似乎不是实际值的数据类型。相反,它是您尝试比较的子集的索引之间的差异。
  • 好吧,从这些我仍然看不到索引 :) 您可能想要复制一些实际数据。由此看来,所有四个集合实际上都是同一个数据帧(除非发生了其他事情)。
  • 抱歉,在我的第一条评论中,我的意思是df0.tailp(3).values

标签: python pandas


【解决方案1】:

使用系列/列而不是 DataFrame。

所以而不是:

dfO = dfOHLCV.drop(dfOHLCV.columns[[0, 1, 3, 4, 5, 6]], axis=1).reset_index() 

sO = dfOHLCV.iloc[:, 2]  # O is the 2th column.
O1 = sO.iloc[-1]
# etc.

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多