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

Sha*_*erz 5 python regex pandas

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

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

我查看df.filter()了 regex 参数,但它失败了,我得到:

df.filter(regex='a')
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)

或者:

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

我尝试过其他事情,例如通过re.compile('a')无济于事。

Sha*_*erz 6

所以看起来我的问题的一部分是我filter使用的是过时的熊猫版本。更新后,我不再获得TypeError. 经过一番玩耍,看起来我可以filter用来满足我的需求。这是我发现的。

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

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


Eze*_*r K 5

也许通过使用列表理解和 .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()]]
Run Code Online (Sandbox Code Playgroud)