簡體   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