我有一个简单的熊猫数据框:
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是唯一的。
答案 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'
>>> 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)的第一次尝试,这可能更直观。