查找名称包含特定字符串的列

新手上路,请多包涵

我有一个包含列名的数据框,我想找到包含特定字符串但不完全匹配的数据框。 I’m searching for 'spike' in column names like 'spike-2' , 'hey spike' , 'spiked-in' (the 'spike' part is总是连续的)。

我希望列名作为字符串或变量返回,所以我稍后使用 df['name']df[name] 正常访问该列。我试图找到方法来做到这一点,但无济于事。有小费吗?

原文由 erikfas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 431
2 个回答

只需遍历 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']

解释:

  1. df.columns 返回列名列表
  2. [col for col in df.columns if 'spike' in col] over the list df.columns with the variable col and adds it to the resulting list if col contains 'spike' 。这种语法是 列表理解

如果您只想要具有匹配列的结果数据集,您可以这样做:

 df2 = df.filter(regex='spike')
print(df2)

输出:

    spike-2  spiked-in
0        1          7
1        2          8
2        3          9

原文由 Alvaro Fuentes 发布,翻译遵循 CC BY-SA 3.0 许可协议

此答案 使用 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)

只会输出“spike-2”。您也可以使用正则表达式,正如某些人在上面的评论中所建议的那样:

 print(df.filter(regex='spike|spke').columns)

将输出两列:[‘spike-2’, ‘hey spke’]

原文由 Ben 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题