根据名称包含列表中的字符串选择熊猫数据框列

时间:2021-03-09 21:14:56

标签: python pandas

我有一个数据框 df 和一个字符串列表 cols_needed,它们表示我想在 df 中保留的列。 df 中的列名与 cols_needed 中的字符串不完全匹配,所以我不能直接使用 intersection 之类的东西。但是列名确实包含 cols_needed 中的字符串。我尝试使用 str.contains 但无法让它工作。如何根据 df 子集 cols_needed

import pandas as pd
df = pd.DataFrame({
    'sim-prod1': [1,2],
    'sim-prod2': [3,4],
    'sim-prod3': [5,6],
    'sim_prod4': [7,8]
})

cols_needed = ['prod1', 'prod2']

# What I want to obtain:
    sim-prod1  sim-prod2
0      1        3
1      2        4

3 个答案:

答案 0 :(得分:3)

您可以使用联合模式探索 str.contains,例如:

df.loc[:,df.columns.str.contains('|'.join(cols_needed))]

输出:

   sim-prod1  sim-prod2
0          1          3
1          2          4

答案 1 :(得分:3)

使用 import os os.system("Reg Query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v ReleaseId") input() regex 选项

filter

df.filter(regex='|'.join(cols_needed))

答案 2 :(得分:2)

列表理解也可以:

columns = [cols for cols in df 
           for col in cols_needed 
           if col in cols]

['sim-prod1', 'sim-prod2']

In [110]: df.loc[:, columns]
Out[110]: 
   sim-prod1  sim-prod2
0          1          3
1          2          4