Python 3.x 根据基于列表对象的检查匹配列名称

Python 3.x 根据基于列表对象的检查匹配列名称,python-3.x,pandas,Python 3.x,Pandas,我试图将一个列表对象与pandas DataFrame匹配,这里有一个条件,其中list对象包含列名,因此,有时DataFrame可能包含matchObj中的所有名称,但有时DataFrame只有很少的列名,只有在这种情况下,它无法完成任务 下面是我的示例列表,例如matchObj和matchObj1: >>> matchObj = ['equity01', 'equity02', 'equity1' 'equity2'] >>> matchObj1 =

我试图将一个列表对象与pandas DataFrame匹配,这里有一个条件,其中list对象包含列名,因此,有时DataFrame可能包含
matchObj
中的所有名称,但有时DataFrame只有很少的列名,只有在这种情况下,它无法完成任务

下面是我的示例列表,例如
matchObj
matchObj1

>>> matchObj = ['equity01',  'equity02',  'equity1'  'equity2']
>>> matchObj1 = ['equity01',  'equity02']
以下是数据帧:

>>> df
   equity01  equity02  equity03  equity04  equity05
0         1         4         7         2         5
1         2         5         8         3         6
2         3         6         9         4         7
当我对df使用list
matchobj1
时,它在查找列名时起作用

>>> print(df[matchObj1])
   equity01  equity02
0         1         4
1         2         5
2         3         6
但是,它无法使用
matchobj
,因为df不包含
equity1 equity2
,因此抛出
键错误:“['equity1equity2']不在索引中”

打印(df[matchObj]) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/grid/common/pkgs/python/v3.6.1/lib/python3.6/site packages/pandas/core/frame.py”,第2133行,在__ 返回self.\u getitem\u数组(键) 文件“/grid/common/pkgs/python/v3.6.1/lib/python3.6/site packages/pandas/core/frame.py”,第2177行,在_getitem_数组中 索引器=self.loc.\u转换为索引器(键,轴=1) 文件“/grid/common/pkgs/python/v3.6.1/lib/python3.6/site packages/pandas/core/index.py”,第1269行,在“convert\u to\u indexer”中 .format(mask=objarr[mask])) KeyError:“['equity1equity2']不在索引中” 使用-

print(df[[i for i in matchObj if i in df.columns]])
输出

   equity01  equity02
0         1         4
1         2         5
2         3         6
解释

[如果i在df.columns中,则i在matchObj中表示i]
仅获取
df
中存在的列。忽略所有其他的。希望有帮助

   equity01  equity02
0         1         4
1         2         5
2         3         6