![](/img/trans.png)
[英]To check if elements in a given list present in array column in DataFrame
[英]Filter Columns from Pandas Dataframe with given list when list elements may or may not be present as column
我有一个巨大的数据框,如果给定列表中存在列,我需要从数据框中过滤掉这些列。
例如,
df = pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10]], columns=list('ABCDE'))
这是数据框。
A B C D E
0 1 2 3 4 5
1 6 7 8 9 10
我有一个清单。
fil_lst = ['A', 'D', 'F']
该列表可能包含数据框中不存在的列名。 我只需要数据框中存在的列。
我需要生成的数据框,例如,
A D
0 1 4
1 6 9
我知道它可以在列表理解的帮助下完成,例如,
new_df = df[[col for col in fil_lst if col in df.columns]]
但是由于我有一个巨大的数据框,如果我不使用这个计算成本高的过程会更好。 是否可以以任何方式对其进行矢量化?
使用Index.isin
在列和测试会员DataFrame.loc
用于过滤器按列,所以:
平均选择由掩码中的所有行和列:
fil_lst = ['A', 'D', 'F']
df = df.loc[:, df.columns.isin(fil_lst)]
print(df)
A D
0 1 4
1 6 9
或使用Index.intersection
:
fil_lst = ['A', 'D', 'F']
df = df[df.columns.intersection(fil_lst)]
print(df)
A D
0 1 4
1 6 9
如果您正在处理大型列表,并且重点是性能而不是列的顺序,则可以使用set intersection
:
In [2944]: fil_lst = ['A', 'D', 'F']
In [2945]: col_list = df.columns.tolist()
In [2947]: df = df[list(set(col_list) & set(fil_lst))]
In [2947]: df
Out[2947]:
D A
0 4 1
1 9 6
编辑:如果列的顺序很重要,请执行以下操作:
In [2953]: df = df[sorted(set(col_list) & set(fil_lst), key = col_list.index)]
In [2953]: df
Out[2953]:
A D
0 1 4
1 6 9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.