Возвращает значение ячейки в многоиндексном фрейме данных Pandas в виде строки - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь вернуть значение одной ячейки из кадра данных, состоящего из примерно 11.000 строк и 10 столбцов:

df = pd.DataFrame({ 'A' : ('foo', 'foo', 'bar', 'bar'),
                    'B' : ('horse', 'car', 'horse', 'car'),
                    'C' : ('red', 'green', 'blue', 'black')})
df
     A      B      C
 0  foo  horse    red
 1  foo    car  green
 2  bar  horse   blue
 3  bar    car  black

Я пробовал несколько версий loc, но всегда возвращал объект, а не фактическое значение («зеленый»). Например:

df.loc[(df['A'] == 'foo') & (df['B'] == 'car'), 'C']

возвращается:

1    green
Name: C, dtype: object

Результат верный, но он возвращается как объект, а не как строка. Я также попытался установить столбцы A и B в качестве индексов в многоиндексном фрейме. Тогда код loc проще, но результат тот же.

Так как я могу получить значение в виде строки, а не объекта?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Использование item:

pandas.Series.item

Series.item () возвращает первый элемент базовых данных как скаляр питона

df.loc[(df['A'] == 'foo') & (df['B'] == 'car'), 'C'].item()

Выход:

'green'
0 голосов
/ 26 апреля 2018

Вы получаете серию, и вам нужен первый объект.

Вы можете думать о том, что вы делаете, как о получении эквивалента списка pd.Series длины 1: ['green']. Если бы это был список, вы бы сделали list[0].

Однако подмножество серий панд основано на индексе, поэтому вы не можете этого сделать. Для подмножества без знания индекса серии используйте iloc[0]:

df.loc[(df['A'] == 'foo') & (df['B'] == 'car'), 'C'].iloc[0]

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