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')无济于事。
所以看起来我的问题的一部分是我filter使用的是过时的熊猫版本。更新后,我不再获得TypeError. 经过一番玩耍,看起来我可以filter用来满足我的需求。这是我发现的。
简单的设置df.filter(regex='string')将返回与正则表达式匹配的列。这看起来与df.filter(regex='string', axis=1).
要搜索索引,我只需要做 df.filter(regex='string', axis=0)
也许通过使用列表理解和 .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)