从.loc查询返回字符串

时间:2020-03-13 17:48:38

标签: python pandas dataframe

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

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 个答案:

答案 0 :(得分:2)

正如@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 :(得分:1)

@ anky_91是正确的。在这种情况下,您应该使用.iloc。

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)

答案 2 :(得分:1)

尝试一下-

df.loc[df[df['Age'] == 15].index[0], 'Name']

答案 3 :(得分:1)

我建议考虑使用查询。如果只想获取str,可以使用:

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

考虑到罗恩(Ron)的第一次尝试,这可能更直观。

相关问题