我有一个数据框 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
答案 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