对pickle数据使用if语句

2024-06-08 01:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编码还不熟悉,刚看完一段关于pickle函数的视频。我想使用pickle数据作为一个浮点数,我可以将它输入到我的代码中,但是它抛出了下面列出的一个错误

我的代码:

dataFF = fred.get_series_latest_release("CPIAUCSL")
x = (dataFF.tail(1))

dataXX = fred.get_series_latest_release("STLPPM")
y = (dataXX.tail(1))

if float(x)<=0:
     pickle.dump(y,open("fred.dot","wb"))
e = pickle.load(open("fred.dot","rb"))-5
if y<=e:
     print("hi")

我的错误:

Traceback (most recent call last):
  File "C:/Users/sc/PycharmProjects/fred project/main.py", line 78, in <module>
    if y<=e::
  File "C:\Users\sc\Desktop\vfred\lib\site-packages\pandas\core\generic.py", line 1537, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Tags: 代码getreleaseif错误openfredlatest
1条回答
网友
1楼 · 发布于 2024-06-08 01:24:03

从注释中查看您正在使用的包,您可以看到fred.get_series_latest_release(){a1}是一个pandas{}

查看pandas{a2}for Series.tail(),您可以看到它返回最后n行,也是类型pandas.Series。您可以在调用后立即检查此print(type(x))print(type(y))

由于Series可以包含任意数量的行,因此对一个行调用float没有多大意义,但是,如果Series的长度为1,那么pandas会尝试做正确的事情并将其转换为here

有一件事是pandas不允许在Series之间进行比较。这就是错误的根源

这里

if float(x)<=0:

在比较之前,您做了正确的事情并将长度为1的Series转换为float

然而,在这里

if y<=e:

对于y,您无法执行相同的操作。 所以如果你要这么做

if float(y)<=float(e):

它应该能解决你的问题

但是真正的罪魁祸首是在你需要一个{}的时候带着一个{}到处走动。 更好的方法是立即转换为float

x = float(dataFF.tail(1))
y = float(dataXX.tail(1))

这样,您的比较就可以工作,而不必担心每次转换

相关问题 更多 >

    热门问题