从 .loc 查询返回字符串

Ron*_*sen 2 python dataframe pandas

我有一个简单的熊猫数据框:

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

如果我从行索引 1 中选择名称,我会得到一个简单的字符串对象:

df.loc[1].Name
Out[9]: 'nick'
Run Code Online (Sandbox Code Playgroud)

但是,如果我选择包含 Age == 15 的行,我会得到一个似乎无法强制转换为字符串对象的对象

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

好吧,这是一个系列,这很酷,获取第一个元素:

df.loc[df.Age==15].Name[0]
KeyError: 0
Run Code Online (Sandbox Code Playgroud)

好吧,这不起作用,让我们询问实际的密钥:

df.loc[df.Age==15].Name[1]
Out[40]: 'nick'
Run Code Online (Sandbox Code Playgroud)

是的!这样可行!...但是如果我知道实际的密钥,我一开始就不会进行查询!

如果我知道年龄,如何从此名称字段获取字符串值?在我的真实用例中,我知道年龄是独一无二的。

Jar*_*děk 5

正如@ayhan 在上面的评论中所说,你可以pandas.Series.item()这样使用:

>>> df.loc[df.Age==15, 'Name'].values.item()
'nick'
Run Code Online (Sandbox Code Playgroud)

您还可以使用pandas.Series.array

>>> df.loc[df.Age==15, 'Name'].array[0]
'nick'
Run Code Online (Sandbox Code Playgroud)

或者pandas.Series.to_numpy

>>> df.loc[df.Age==15, 'Name'].to_numpy()[0]
'nick'
Run Code Online (Sandbox Code Playgroud)