我有pandas DataFrame,我想知道如何从给定列表targets
中选择包含任何子字符串的列:
targets = ["c1", "c2"]
df =
c1_targ c2xxx c3abc
... ... ...
预期结果:
df =
c1_targ c2xxx
... ...
这是我尝试过的:
cols = [[True if col in df.columns else False] for col in targets]
答案 0 :(得分:2)
您可以使用|
连接正则表达式OR
的字符串的每个值-'c1|c2'
是c1
或c2
,然后按DataFrame.filter
进行过滤:
targets = ["c1", "c2"]
df1 = df.filter(regex='|'.join(targets))
或者通过str.contains
创建掩码,并使用:
通过DataFrame.loc
过滤,以按掩码获取所有行和列:
df1 = df.loc[:, df.columns.str.contains('|'.join(targets))]
print (df1)
c1_targ c2xxx
0 ... ...
答案 1 :(得分:1)
您可以使用此:
new_col = [x for x in df.columns if any(y in x for y in targets)]
df = df[df.columns.intersection(new_col)]