将Pandas多索引数据帧中的单元格值返回为字符串

时间:2018-04-26 20:27:44

标签: python pandas

我正在尝试从大约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,但总是得到一个返回的对象,而不是实际的值('green')。例如:

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

返回:

1    green
Name: C, dtype: object

结果是正确的,但它作为对象返回,而不是作为字符串返回。我还尝试将列A和B设置为多索引帧中的索引。然后,loc代码更容易,但结果相同。

那么如何将值作为字符串而不是作为对象获取?

2 个答案:

答案 0 :(得分:0)

你正在推出一个系列,你想要第一个对象。

你可以想到你正在做什么,因为获得pd.Series相当于长度为1的列表:['green']。如果是列表,您可以list[0]

但是,pandas系列子集基于索引,所以你不能这样做。要在不知道系列索引的情况下使用iloc[0]

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

'green'

答案 1 :(得分:0)

使用item

  

pandas.Series.item

     

Series.item()返回基础数据的第一个元素   作为python标量

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

输出:

'green'