pandas:find其名称包含特定string的列
所以,我有一个列名称的数据框,我想find一个包含某个string,但不完全匹配它。 我在'spike-2'
, 'hey spike'
, 'spiked-in'
( 'spike'
部分总是连续的)这样'spike-2'
列名中寻找'spike'
。
我希望列名作为string或variables返回,所以稍后使用df['name']
或df[name]
作为正常访问列。 我试图find办法做到这一点,无济于事。 有小费吗?
只需遍历DataFrame.columns
,现在这是一个例子,您将最终列出匹配的列名称:
import pandas as pd data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]} df = pd.DataFrame(data) spike_cols = [col for col in df.columns if 'spike' in col] print(list(df.columns)) print(spike_cols)
输出:
['hey spke', 'no', 'spike-2', 'spiked-in'] ['spike-2', 'spiked-in']
说明:
-
df.columns
返回列名称列表 -
[col for col in df.columns if 'spike' in col]
列表df.columns
上迭代了variablescol
,并将其添加到结果列表中(如果col
包含'spike'
则[col for col in df.columns if 'spike' in col]
。 这个语法是列表理解 。
如果你只想得到与你匹配的列的结果数据集,你可以这样做:
df2 = df.filter(regex='spike') print(df2)
输出:
spike-2 spiked-in 0 1 7 1 2 8 2 3 9
这个答案使用DataFrame.filter方法来做到这一点没有列表理解:
import pandas as pd data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]} df = pd.DataFrame(data) print(df.filter(like='spike').columns)
输出只是“秒杀2”。 你也可以使用正则expression式,正如一些人在上面的评论中所build议的那样:
print(df.filter(regex='spike|spke').columns)
将会输出两列:['spike-2','hey spke']
你也可以使用df.columns [df.columns.str.contains(pat ='spike')]
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]} df = pd.DataFrame(data) colNames = df.columns[df.columns.str.contains(pat = 'spike')] print(colNames)
这将输出列名:'spike-2',u'spiked-in'