Как использовать объект списка для выбора столбцов в Pandas? [дубликат]Python

Программы на Python
Ответить
Anonymous
 Как использовать объект списка для выбора столбцов в Pandas? [дубликат]

Сообщение Anonymous »

У меня есть фрейм данных Pandas. Вот заголовок кадра данных.

Код: Выделить всё

import pandas as pd

>>> print(data.head().to_dict())
{'sev_wp': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'treatm': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'coastal_blue': {0: 1.58052248041715, 1: 1.26409021294804, 2: 1.26409021294804, 3: 1.26409021294804, 4: 0.994786155527525}, 'blue': {0: -0.336983534738932, 1: -0.884698555162132, 2: -0.884698555162132, 3: -0.884698555162132, 4: -1.53384228307111}, 'green_i': {0: 1.33800604485007, 1: 0.776926917841023, 2: 0.776926917841023, 3: 0.776926917841023, 4: 0.377514657936281}, 'green': {0: 2.68597945621331, 1: 1.58516997566776, 2: 1.58516997566776, 3: 1.58516997566776, 4: 1.07584021601236}, 'yellow': {0: 1.20877030788792, 1: 0.475708532119886, 2: 0.475708532119886, 3: 0.475708532119886, 4: -0.276311737849043}, 'red': {0: 2.63361830889331, 1: 1.11300399267852, 2: 1.11300399267852, 3: 1.11300399267852, 4: 0.236997919206959}, 'rededge': {0: 2.11599647047905, 1: 1.16212184209483, 2: 1.16212184209483, 3: 1.16212184209483, 4: 0.576409350981715}, 'nir': {0: -0.434334991323623, 1: -0.373078745736807, 2: -0.373078745736807, 3: -0.373078745736807, 4: -0.0116668967745943}, 'NDVI': {0: -2.6771557771335, 1: -1.31173767041364, 2: -1.31173767041364, 3: -1.31173767041364, 4: -0.209251112825893}, 'NDRE': {0: -1.82076038497479, 1: -1.12135924381244, 2: -1.12135924381244, 3: -1.12135924381244, 4: -0.382760296937604}, 'EVI': {0: -2.44239553801689, 1: -1.51099887164331, 2: -1.51099887164331, 3: -1.51099887164331, 4: -0.795016041368284}, 'MSAVI': {0: -2.88202070613089, 1: -1.34492948212924, 2: -1.34492948212924, 3: -1.34492948212924, 4: -0.185847827987961}, 'GRVI': {0: -1.74980698922056, 1: -0.344465124979804, 2: -0.344465124979804, 3: -0.344465124979804, 4: 0.752333957974443}, 'CCCI': {0: -1.64344768875605, 1: -0.755059434834394, 2: -0.755059434834394, 3: -0.755059434834394, 4: 0.183118372070548}, 'CCI': {0: -0.508889453983112, 1: -0.0467564292748122, 2: -0.0467564292748122, 3: -0.0467564292748122, 4: 0.198442146416302}, 'PRSI': {0: -2.57823272369635, 1: -0.706323363271297, 2: -0.706323363271297, 3: -0.706323363271297, 4: 0.557964211784566}, 'Date': {0: '2022-08-16', 1: '2022-08-16', 2: '2022-08-16', 3: '2022-08-16', 4: '2022-08-16'}, 'mean_sev_wp': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'year': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan}}
У меня есть список имен столбцов.

Код: Выделить всё

>>> type(colsel)

>>> colsel
['coastal_blue', 'yellow', 'rededge', 'CCI', 'green_i', 'EVI', 'CCCI', 'nir', 'NDRE', 'blue', 'red', 'MSAVI']
>>> data.columns
Index(['sev_wp', 'treatm', 'coastal_blue', 'blue', 'green_i', 'green',
'yellow', 'red', 'rededge', 'nir', 'NDVI', 'NDRE', 'EVI', 'MSAVI',
'GRVI', 'CCCI', 'CCI', 'PRSI', 'Date', 'mean_sev_wp', 'year'],
dtype='str')
Я хочу выбрать столбцы из данных с именами в colsel. Я попробовал

Код: Выделить всё

>>> data.loc[colsel]
и получите ошибку

Код: Выделить всё

Traceback (most recent call last):
File "", line 1, in 
data.loc[colsel]
~~~~~~~~^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexing.py", line 1207, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexing.py", line 1438, in _getitem_axis
return self._getitem_iterable(key, axis=axis)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexing.py", line 1378, in _getitem_iterable
keyarr, indexer = self._get_listlike_indexer(key, axis)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexing.py", line 1576, in _get_listlike_indexer
keyarr, indexer = ax._get_indexer_strict(key, axis_name)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexes\base.py", line 6302, in _get_indexer_strict
self._raise_if_missing(keyarr, indexer, axis_name)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\japolo\AppData\Local\miniconda3\envs\keras\Lib\site-packages\pandas\core\indexes\base.py", line 6352, in _raise_if_missing
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Index(['coastal_blue', 'yellow', 'rededge', 'CCI', 'green_i', 'EVI', 'CCCI',\n       'nir', 'NDRE', 'blue', 'red', 'MSAVI'],\n      dtype='str')] are in the [index]"
Как выбрать нужные столбцы из данных? Мне кажется, что имена в colsel совпадают с именами столбцов в data. Я знаю, что у ключевой ошибки есть символ новой строки в списке, но новая строка не находится ни в одном из элементов. Я использовал

Код: Выделить всё

colsel = [x.strip() for x in colsel]
чтобы убедиться, что в самих строках нет пробелов. Поэтому я не знаю, означает ли эта новая строка что-нибудь в этой ключевой ошибке.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»