pandas Фрейм данных выбирает строки из набора данных, которые начинаются с - PullRequest
0 голосов
/ 28 марта 2020

Я читаю данные из CSV-файла и мне нужны только определенные c столбцы, мне нужно выбрать несколько строк, которые соответствуют префиксу, который я передам, я делаю следующее:

account_name = 'Acc1'
df_ec2tpm=pd.read_csv(ec2File, usecols = ["Internal IP", "Instance Id", "PatchGroup","Account"], index_col=3)
df_ec2tpm.loc[df_ec2tpm['Account'].str.startswith(account_name)]
print (df_ec2tpm)

Если Я печатаю результаты и вижу следующее:

Account,Instance Id,PatchGroup,Internal IP
Acc1-dev,i-0aaa9525f4999999,Windows,192.168.3.20
Acc1-dev,i-0aaa9525f5000000,Windows,192.168.3.21
Acc2-prod,i-0aaa9525f5000001,Windows,192.168.3.22
Acc1-prod,i-0aaa9525f5000002,Windows,192.168.3.23
Acc1-prod,i-0aaa9525f5000003,Windows,192.168.3.24
Acc2-dev,i-0aaa9525f5000004,Windows,192.168.3.25
Acc2-dev,i-0aaa9525f5000005,Windows,192.168.3.26
Acc2-dev,i-0aaa9525f5000006,Windows,192.168.3.27

, но когда я пытаюсь выбрать с помощью df_ec2tpm.lo c, происходит сбой с ошибкой

 File "C:\Users\marr\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexes\base.py", line 2899, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas\_libs\index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Account'

Что это такое неправильно?

В идеале я сделаю

df_ec2=df_ec2tpm.loc[df_ec2tpm['Account'].str.startswith(account_name)]

Поскольку мне нужно объединить этот набор данных с другим.

1 Ответ

1 голос
/ 28 марта 2020

Проблема в том, что «Account» теперь является индексом фрейма данных, а не его столбца. Вот почему вы получаете KeyError. Просто удалите index_col=3.

Также, df_ec2tpm = df_ec2tpm.loc[df_ec2tpm['Account'].str.startswith(account_name), :] Slicing выводит новый фрейм данных без изменения фрейма данных на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...