繁体   English   中英

Pandas - 过滤和正则表达式搜索 DataFrame 的索引

[英]Pandas - filter and regex search the index of DataFrame

我有一个 DataFrame,其中列是 MultiIndex,索引是名称列表,即index=['Andrew', 'Bob', 'Calvin',...]

我想创建一个 function 以返回 dataframe 中使用名称“Bob”或者以字母“A”开头或以小写字母开头的所有行。 如何才能做到这一点?

我用正则表达式参数查看了df.filter() ,但它失败了,我得到:

df.filter(regex='a')
TypeError: expected string or buffer

或者:

df.filter(regex=('a',1)
TypeError: first argument must be string or compiled pattern

我尝试过其他方法,例如传递re.compile('a')无济于事。

也许可以通过使用列表理解和.ix尝试不同的方法:

import pandas as pd

df = pd.DataFrame(range(4),index=['Andrew', 'Bob', 'Calvin','yosef'])

df.ix[[x for x in df.index if x=='Bob']]

df.ix[[x for x in df.index if x[0]=='A']]

df.ix[[x for x in df.index if x.islower()]]

因此,看起来我的filter问题的一部分是我使用的是过时版本的熊猫。 更新后,我不再得到TypeError 经过一番游戏之后,看来我可以使用filter来满足我的需求了。 这是我发现的。

只需设置df.filter(regex='string')返回与正则表达式匹配的列。 这看起来与df.filter(regex='string', axis=1)

要搜索索引,我只需要做df.filter(regex='string', axis=0)

使用 pandas.Series.str.contains() 怎么样? 如果您的索引仅限于字符串,则 function 适用于系列和索引。 非字符串的 Boolean 变为 nan。

import pandas as pd
df = pd.DataFrame(range(4),index=['Andrew', 'Bob', 'Calvin','yosef'])
mask = df.index.str.contains(rf"^A")
columns = df.index[mask]  # columns = Index(['Andrew'], dtype='object')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM