2 回答

TA貢獻1873條經驗 獲得超9個贊
使用 pandas 的DataFrame.filter運行相同的正則表達式:
df.filter(regex = "oa|sch").columns
# Index(['goats', 'boats', 'schmoats', 'schlomo'], dtype='object')
df.filter(regex = "oa|sch").columns.values
# ['goats' 'boats' 'schmoats' 'schlomo']
數據
import numpy as np
import pandas as pd
np.random.seed(21419)
df = pd.DataFrame({'cheese': np.random.randn(10),
'goats': np.random.randn(10),
'boats': np.random.randn(10),
'schmoats': np.random.randn(10),
'schlomo': np.random.randn(10),
'cows': np.random.randn(10)})
并且要搜索多個字符串:
rgx = "|".join(list_of_strings)
df.filter(regex = rgx)
要返回索引,請考慮來自@Divakar 的矢量化 numpy 解決方案。請注意,與 R 不同,Python 是零索引的。
def column_index(df, query_cols):
cols = df.columns.values
sidx = np.argsort(cols)
return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]
column_index(df, df.filter(regex="oa|sch").columns)
# [1 2 3 4]

TA貢獻1875條經驗 獲得超5個贊
也許您正在尋找re模塊?
import re
pattern = re.compile("oa|sch")
[i for i in range(len(df.columns)) if pattern.search(df.columns[i])]
# [1, 2, 3, 4]
與 R 的矢量化相比,可能不是最好的,但列表理解應該沒問題。
如果你想將字符串連接在一起,你可以做類似的事情
"|".join(("oa", "sch"))
# 'oa|sch'
添加回答
舉報