【问题标题】:Indexing a pandas dataframe by integer按整数索引 pandas 数据帧
【发布时间】:2012-07-23 21:57:01
【问题描述】:

我似乎无法通过整数索引找到indexpandas.DataFrame 的优雅方式。 在下面的示例中,我想从'A' 列的第一个元素中获取值“a”。

import pandas
df = pandas.DataFrame(
    {'A':['a','b', 'c'], 'B':['f', 'g', 'h']}, 
    index=[10,20,30]
    )

我希望df['A'].ix[0]df['A'][10] 都返回'a'df['A'][10] 确实返回 'a',但 df['A'].ix[0] 抛出 KeyError: 0。我能想到的根据索引 0 获取值 'a' 的唯一方法是使用以下方法。

df['A'][df['A'].index[0]]

有没有更短的方法可以使用 0 索引将'a' 从数据框中取出?

更新

从 pandas 0.11 开始,index by integer 有另一种方式。

df.iloc[0] # integer based, gives the first row
df.loc[10] # label based, gives the row with label 10

这种supersedesirow 方法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    df['A'].ix[0] 出现错误,因为您的索引不是从 0 开始,而是从 10 开始。您可以使用以下任一方法获得所需的值

    df['A'].ix[10]
    df['A'].irow(0)
    

    第一次使用被正确的索引。我怀疑第二个命令是您想要的,它通过行号而不是索引值来查找值,并且从技术上讲,它只比 df['A'].ix[0] 工作时长两个字符。

    或者,您可以重置索引,以便它们以您期望的方式响应 df['A'].ix[0]

    df2=df.reset_index()
    

    这将保留您的旧索引(10、20 等),方法是将它们移动到 df2 数据框中名为“索引”的列中。然后df2['A'].ix[0] 将返回'a'。如果要删除旧的基于 10 的索引,可以将标志 drop=True 插入 reset_index 函数的括号中。

    【讨论】:

    • 我认为是df['A'].iget(0),因为df['A']Series,它没有irow
    • irow() 已弃用。使用 iloc[] 进行基于位置的索引。
    【解决方案2】:

    在较新的 pandas 版本中,您还可以使用 df["A"].iat(0)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多