[英]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.