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'
添加回答
举报