【问题标题】:Return the int value for a specific column in a pandas data frame返回 pandas 数据框中特定列的 int 值
【发布时间】:2019-08-22 00:57:36
【问题描述】:

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

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

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

【问题讨论】:

  • 试试这个:DF.loc[DF.someCondition=condition, 'A']
  • 这是错误的。我不要位置。我想要 A 的值
  • 你试过了吗?

标签: python pandas numpy


【解决方案1】:

一般情况下,形式为

DF.someCondition = condition

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

DF[DF.someCondition=condition].A

返回一个形状为(1,) 的对象,而不是一个标量值。 如果您确定条件只有一次为真,那么您可以使用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

【讨论】:

    【解决方案2】:

    供将来参考:

    按照 unutbu 的建议使用 iter 肯定可以完成工作;但必须注意,该功能已于 2018 年弃用。

    按照 unutbu 的回答中的建议使用 iter 函数将导致如下所示的警告:

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

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

    正如here 所发布的,如果需要第一个匹配值,以下是使用iternext 的解决方法:

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

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


    如果您有兴趣,可以在herehere 讨论这个问题。

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多