11

我目前正在尝试将 json 文件(我已经可以处理)中的值与 csv 文件中的值(这可能是问题)进行比较。我当前的代码如下所示:

for data in trades['timestamp']:
    data = pd.to_datetime(data)
    print(data)
       if data == ask_minute['lastUpdated']:
           #....'do something'

这使:

":Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。"

我现在的print(data)样子是这样的:

2018-10-03 18:03:38.067000
2018-10-03 18:03:38.109000
2018-10-03 18:04:28
2018-10-03 18:04:28.685000

但是,我仍然无法将 CSV 文件中的这些时间戳与我的 Json 文件中的时间戳进行比较。有人有想法吗?

4

2 回答 2

20

让我们把它简化为一个更简单的例子。例如,通过以下比较:

3 == pd.Series([3,2,4,1])

0     True
1    False
2    False
3    False
dtype: bool

你得到的结果是一个Series布尔值,大小等于pd.Series表达式右侧的 。所以这里真正发生的是整数在整个系列中广播,然后将它们进行比较。所以当你这样做时:

if 3 == pd.Series([3,2,4,1]):
    pass

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

你得到一个错误。这里的问题是您将 apd.Series与一个值进行比较,因此您将拥有多个True和多个False值,如上例所示。这当然是模棱两可的,因为条件不是Trueor False

因此,您需要进一步聚合结果,以便从操作中产生单个布尔值。为此,您必须使用anyall取决于您是否需要至少一个 ( any) 或all值来满足条件。

(3 == pd.Series([3,2,4,1])).all()
# False

或者

(3 == pd.Series([3,2,4,1])).any()
# True
于 2018-12-18T09:50:31.273 回答
2

我看到的问题是,即使您正在评估数据框中的一行,代码也知道数据框有能力拥有很多行。该代码不只是假设您想要唯一存在的行。你必须明确地告诉它。我解决它的方式是这样的:

if data.iloc[0] == ask_minute['lastUpdated']:

然后代码知道您正在选择存在的一行。

于 2020-05-14T13:31:32.963 回答