Python Pandas:布尔/谓词搜索的首选习惯用法
我有两个问题,它们都在下面的帖子中 考虑这个数据帧:Python Pandas:布尔/谓词搜索的首选习惯用法,python,pandas,Python,Pandas,我有两个问题,它们都在下面的帖子中 考虑这个数据帧: 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”开头的所有行 以下是此类
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"))]
df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]
我在Pandas中发现的一件事是,一旦有意义的数据成为DataFrame
索引,就很难用它做事情,尤其是查询它。假设我们现在有:
df_2 = df_1.set_index(["x"], drop=True)
df_2
我发现做同样的搜索,如果我搜索索引,需要做更多的工作
以下是此类搜索的首选习惯用法吗?
df_1[df_1["x"].apply(lambda val : val.startswith("a"))]
df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]
在这两种情况下,我都会使用向量化的
.str.startswith(…)
方法。它不一定性能更好,只是更干净。有关更多信息,请参阅
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
我不知道这些
str
方法。这打开了一个全新的世界。谢谢!