数据帧过滤

时间:2021-01-25 23:57:30

标签: python pandas

给定一个 DataFrame df,如果想将 DataFrame 过滤到 column_4 介于 45 和 48 之间的行,可以尝试以下代码片段:

import pandas as pd

df = pd.DataFrame({f'column_{i}': range(i*10, 10*i+10) for i in range(10)})

df2 = df[45 < df['column_4'] < 48]

然而,这段代码会产生一个 ValueError,因为 The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 而不是必须这样做

import pandas as pd

df = pd.DataFrame({f'column_{i}': range(i*10, 10*i+10) for i in range(10)})

df2 = df[(45 < df['column_4']) & (df['column_4'] < 48)]

为什么会这样 - 这是一种过滤 DataFrame 的黑客方法吗?

这个问题似乎有部分答案 here,但这似乎并没有具体说明为什么 45 < a < 48 不起作用。

1 个答案:

答案 0 :(得分:0)

It's already been asked,我只是搜索了错误的术语。

简短的回答是诸如 1 < a < 4 之类的链式关系运算符在内部扩展为 (1 < a) and (a < 4)andor 不能在 Python 中被覆盖——参见 PEP335guido's post to the mailing list——这意味着 numpy 不能使用链式关系运算符作为掩码。因此,熊猫也不能。