Возврат строки из запроса .lo c - PullRequest
0 голосов
/ 13 марта 2020

У меня есть простой pandas фрейм данных:

import pandas as pd 
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
df = pd.DataFrame(data, columns = ['Name', 'Age'])

Если я выберу Имя из индекса строки 1, я получу простой строковый объект:

df.loc[1].Name
Out[9]: 'nick'

Но если я выбрав строку, содержащую Age == 15, я получаю объект, который, как мне кажется, не может привести к строковому объекту

df.loc[df.Age==15].Name
Out[11]:1    nick
Name: Name, dtype: object
type(df.loc[df.Age==15].Name)
Out[38]: pandas.core.series.Series

Хорошо, это серия, это круто, получите первый элемент:

df.loc[df.Age==15].Name[0]
KeyError: 0

Ну, это не сработало, давайте спросим фактический ключ:

df.loc[df.Age==15].Name[1]
Out[40]: 'nick'

Да! Это работает! ... но если бы я знал фактический ключ, я бы вообще не выполнил запрос!

Как мне получить строковое значение из этого поля имени, если я знаю возраст? В моем реальном случае я знаю, что Age уникальна.

Ответы [ 4 ]

2 голосов
/ 13 марта 2020

Как сказал @ayhan в комментарии выше, вы можете использовать pandas.Series.item() следующим образом:

>>> df.loc[df.Age==15, 'Name'].values.item()
'nick'

Вы также можете использовать pandas.Series.array:

>>> df.loc[df.Age==15, 'Name'].array[0]
'nick'

или pandas.Series.to_numpy:

>>> df.loc[df.Age==15, 'Name'].to_numpy()[0]
'nick'
1 голос
/ 13 марта 2020

Рекомендую рассмотреть вопрос об использовании запроса. Если вы хотите получить только str, вы можете использовать:

df.query('Age==15').Name.values[0]

Это может быть более интуитивно понятно с первой попытки Рона.

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

Попробуйте это -

df.loc[df[df['Age'] == 15].index[0], 'Name']
1 голос
/ 13 марта 2020

@ anky_91 прав. Вы должны использовать .ilo c, для этого случая.

import pandas as pd
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
print(df.loc[df.Age==14].iloc[0].Name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...