我有两个问题,他们在下面的帖子中都是粗体。
考虑这个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
假设我想要x
值以字母“a”开头的所有行。
以下是此类搜索的首选习惯用语吗?
df_1[df_1["x"].apply(lambda val : val.startswith("a"))]
我在Pandas中发现的一件事是,一旦有意义的数据成为DataFrame
索引,就很难用它做事,尤其是查询它。假设我们现在有:
df_2 = df_1.set_index(["x"], drop=True)
df_2
我发现要进行相同的搜索,如果我正在搜索索引,则会涉及更多工作。
以下是此类搜索的首选习惯用语吗?
df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]
答案 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