Честно говоря, я не знаю точно, что здесь происходит, но у меня есть несколько теорий. Позвольте мне показать вам мой мыслительный процесс здесь:
df[["col_1", "col_2", "col_3"]]
Это фрагмент df, содержащий список столбцов.
Когда вы передаете список в этот синтаксис, используя, как в первом примере,
col_list = ["col_1", "col_2", "col_3"]
df[[col_list]]
то, что вы на самом деле говорите:
df[[["col_1", "col_2", "col_3"]]]
Pandas не Не знаю, как обрабатывать дополнительный список, поэтому возникает ошибка.
Итак, как я могу передать список в фрейм данных?
df[col_list]
Это работает, могу я просто передать список и добавить его на место? Примерно так:
df[col_list.append("col_x")]
Нету! Это приводит к ошибке KeyError:
>>> df[col_list.append("col_x")]
>>> Traceback (most recent call last):
>>> File "C:\Users\dmarienburg\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2646, in get_loc
>>> return self._engine.get_loc(key)
>>> File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
>>> File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
>>> File "pandas\_libs\hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
>>> File "pandas\_libs\hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
>>> KeyError: None
Таким образом, самое простое решение - просто добавить список перед разрезанием фрейма данных:
col_list = ["col_1", "col_2", "col_3"]
# some other code here
col_list.append("col_x")
df[col_list]