返回pandas数据框中特定列的int值

时间:2016-11-16 20:16:29

标签: python pandas numpy

在我的数据框DF中,我有一个名为'A'的列,它的值是整数值。但是当我想使用

检索特定行的A值时
DF[DF.someCondition=condition].A

它返回一个不是int的shape(1,)对象,因为int没有形状。我想要int因为我想将此值用作另一个numpy数组的索引条目。如何检索A的值以使其为int值?

2 个答案:

答案 0 :(得分:1)

一般来说,形式的条件

DF.someCondition = condition

可能不止一次是真的。这就是为什么

DF[DF.someCondition=condition].A

返回形状(1,)的对象而不是标量值。 如果您确定条件仅为True一次,则可以使用item

提取标量值
DF[DF.someCondition=condition].A.item()

但是,作为MaxU suggested,最好使用.loc来避免链式索引:

DF.loc[DF.someCondition=condition, 'A'].item()

例如,

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(6).reshape(3,2), columns=list('AB'))
df[df['B']==3].A
# 1    2
# Name: A, dtype: int64

df.loc[df['B']==3, 'A'].item()
# 2

答案 1 :(得分:0)

供以后参考:

使用unutbu建议的iter一定可以完成工作;但是必须注意,该功能自2018年起已过时。

按照unutbu的答案中的建议使用iter函数将产生如下警告:

  

FutureWarning:item已被弃用,并将在   未来版本

从警告中可以明显看出,此功能将很快删除。此信息也可以在source代码中找到。

Source Screenshot

here所述,如果需要第一个匹配的值,下面是将iternext一起使用的解决方法:

x = df.loc[df['B']==3, 'A'].item()
next(iter(x), 'no match')

优点是,如果没有值匹配,则可以返回默认值。


如果您进一步感兴趣,将在herehere中讨论此问题。