我有一个列名的dataframe,我想找到包含某个字符串的数据,但是不完全匹配它。我正在搜索'spike'的列名,如'spike-2'、'hey spike'、'spiked-in' ( 'spike'部分总是连续的)。
我希望以字符串或变量的形式返回列名,因此我稍后使用df['name']或df[name]作为常规访问该列。我试过想办法做这件事,但没有用。有小费吗?
发布于 2014-01-22 14:25:56
只需在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]使用变量col在列表df.columns上迭代,如果col包含'spike',则将其添加到结果列表中。这个语法是列表理解。如果只希望结果数据集与匹配的列匹配,则可以这样做:
df2 = df.filter(regex='spike')
print(df2)输出:
spike-2 spiked-in
0 1 7
1 2 8
2 3 9发布于 2017-01-26 15:10:21
这个答案使用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”。您也可以使用regex,正如一些人在上面的评论中所建议的那样:
print(df.filter(regex='spike|spke').columns)将输出两列:“spke-2”、“嗨spke”。
发布于 2017-10-08 17:11:03
您也可以使用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', 'spiked-in'
更多关于pandas.Series.str.contains的信息。
https://stackoverflow.com/questions/21285380
复制相似问题