Python-pandas:一个系列的真值不明确

Vik*_*r.w 7 python pandas

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

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

这使:

":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
Run Code Online (Sandbox Code Playgroud)

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

yat*_*atu 12

让我们将其简化为一个更简单的示例。例如,通过进行以下比较:

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

0     True
1    False
2    False
3    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

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

if 3 == pd.Series([3,2,4,1]):
    pass
Run Code Online (Sandbox Code Playgroud)

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

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

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

(3 == pd.Series([3,2,4,1])).all()
# False
Run Code Online (Sandbox Code Playgroud)

或者

(3 == pd.Series([3,2,4,1])).any()
# True
Run Code Online (Sandbox Code Playgroud)