我正在尝试将列表对象与pandas DataFrame进行匹配,在这里我有一个条件,其中列表对象包含列名称,因此,有时DataFrame可能包含matchObj
中的所有名称,但有时当DataFrame仅在那种情况下只有很少的列名时,它将无法执行作业。
下面是我的示例列表,例如matchObj
和matchObj1
:
>>> 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"
答案 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
中存在的列。忽略其余所有内容。希望有帮助。