熊猫:布尔/谓词搜索的首选习语

时间:2016-03-31 16:27:12

标签: python pandas

我有两个问题,他们在下面的帖子中都是粗体

考虑这个DataFrame

from pandas import DataFrame

df_1 = DataFrame ({
        "x" : ["a - {}".format(i) for i in range(2)] + 
              ["b - {}".format(i) for i in range(2)] ,
        "y" : range(4)
    })
df_1

enter image description here

假设我想要x值以字母“a”开头的所有行。

以下是此类搜索的首选习惯用语吗?

df_1[df_1["x"].apply(lambda val : val.startswith("a"))]

enter image description here

我在Pandas中发现的一件事是,一旦有意义的数据成为DataFrame索引,就很难用它做事,尤其是查询它。假设我们现在有:

df_2 = df_1.set_index(["x"], drop=True)
df_2

enter image description here

我发现要进行相同的搜索,如果我正在搜索索引,则会涉及更多工作。

以下是此类搜索的首选习惯用语吗?

df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]

enter image description here

1 个答案:

答案 0 :(得分:1)

在这两种情况下,我都会使用矢量化.str.startswith(...)方法。它不一定更高效,更清洁。有关详情,请参阅working with text documentation

In [22]: df_1[df_1["x"].str.startswith("a")]
Out[22]: 
       x  y
0  a - 0  0
1  a - 1  1

In [23]: df_2[df_2.index.str.startswith('a')]
Out[23]: 
       y
x       
a - 0  0
a - 1  1