Pandas Dataframe срезать по индексу - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь нарезать фрейм данных с индексом, но выдает ошибку, поскольку 'TypeError:' Int64Index ([1], dtype = 'int64') 'является недопустимым ключом'

data = [['Alex', 10], ['Bob', 12], ['Clarke', 13]]
df = pd.DataFrame(data, columns=['Name', 'Age'])
index = df.index[df['Name'] == 'Bob']
print(index)
df = df.loc[index:]

Ошибка:

df = df.loc[index:]
File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1500, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1867, in _getitem_axis
return self._get_slice_axis(key, axis=axis)
File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1533, in _get_slice_axis
slice_obj.step, kind=self.name)
File "C:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 4672, in slice_indexer
kind=kind)
File "C:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 4871, in slice_locs
start_slice = self.get_slice_bound(start, 'left', kind)
File "C:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 4801, in get_slice_bound
slc = self._get_loc_only_exact_matches(label)
File "C:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 4771, in _get_loc_only_exact_matches
return self.get_loc(key)
File "C:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 2656, in get_loc
return self._engine.get_loc(key)
File "pandas\_libs\index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 110, in pandas._libs.index.IndexEngine.get_loc
TypeError: 'Int64Index([1], dtype='int64')' is an invalid key

Печать индекса дает 'Int64Index ([1], dtype =' int64 ')' Как мне преобразовать его в значение типа int.

Нет большой документации по https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Int64Index.html

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

небольшая модификация вашего кода

index = list(df.index[df['Name'] == 'Bob'])

должна дать вам разрешение.Дайте мне знать, если это работает

0 голосов
/ 01 марта 2019

Для этого вам нужно убедиться, что ваша переменная index содержит только целое число, а не какой-либо другой объект, который может содержать несколько значений (если «Боб» появляется более одного раза).В этом случае он будет содержать только одно значение, поскольку «Боб» появляется в вашей таблице только один раз, но вы получаете объект Int64Index, который может содержать несколько целых чисел.То, что вы хотите, это просто старое целое число.

Следующее должно работать для вашей таблицы и для таблицы, где Боб действительно появляется несколько раз (он выберет индекс для первой строки, в которой 'Боб')Появляется):

index = (df['Name'] == 'Bob').idxmax()

Функция idxmax возвращает индекс элемента с самым высоким значением в серии (и True больше False, поэтому возвращаетиндекс, где имя «Боб»).В случае, когда есть два или более старших значения, возвращается первый индекс.

0 голосов
/ 01 марта 2019

Попробуйте, если хотите получить весь массив данных, начиная с этого индекса:

df = df.loc[index[0]:]

Если вы пытаетесь получить только строку по имени, попробуйте:

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