大熊猫根据基于列表对象的检查来匹配列名

时间:2019-07-14 10:11:31

标签: python-3.x pandas

我正在尝试将列表对象与pandas DataFrame进行匹配,在这里我有一个条件,其中列表对象包含列名称,因此,有时DataFrame可能包含matchObj中的所有名称,但有时当DataFrame仅在那种情况下只有很少的列名时,它将无法执行作业。

下面是我的示例列表,例如matchObjmatchObj1

>>> matchObj = ['equity01',  'equity02',  'equity1'  'equity2']
>>> matchObj1 = ['equity01',  'equity02']

下面是DataFrame:

>>> 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上使用列表matchobj1,但它在找到列名时起作用。

>>> print(df[matchObj1])
   equity01  equity02
0         1         4
1         2         5
2         3         6

但是,它不能与matchobj一起使用,因为df不包含equity1 equity2,因此会抛出KeyError: "['equity1equity2'] not in index"

>>> print(df[matchObj])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/grid/common/pkgs/python/v3.6.1/lib/python3.6/site-packages/pandas/core/frame.py", line 2133, in __getitem__
    return self._getitem_array(key)
  File "/grid/common/pkgs/python/v3.6.1/lib/python3.6/site-packages/pandas/core/frame.py", line 2177, in _getitem_array
    indexer = self.loc._convert_to_indexer(key, axis=1)
  File "/grid/common/pkgs/python/v3.6.1/lib/python3.6/site-packages/pandas/core/indexing.py", line 1269, in _convert_to_indexer
    .format(mask=objarr[mask]))
KeyError: "['equity1equity2'] not in index"

1 个答案:

答案 0 :(得分:2)

使用-

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

输出

   equity01  equity02
0         1         4
1         2         5
2         3         6

说明

[i for i in matchObj if i in df.columns]仅获取df中存在的列。忽略其余所有内容。希望有帮助。