【问题标题】:Can't Select A Cell In Pandas无法在 Pandas 中选择单元格
【发布时间】:2013-12-12 22:58:02
【问题描述】:

这是一个简单的菜鸟问题,但它让我很烦恼。按照教程,我想选择“A”列中的第一个值。该教程说运行print(df[0]['A']) 但Python3 给了我一个错误。但是,如果我使用print(df[0:1]['A']),它会完美运行。这是为什么呢?

这里是复制的完整代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(100, 3), index=pd.date_range('1/1/2000', periods=100), columns=['A', 'B', 'C'])

print(df[0:1]['A'])

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    因为df[0]['A'] 表示索引A 处的列0;你需要使用df.iloc[0]['A'],或df['A'][0],或df.ix[0]['A']

    有关索引和切片,请参阅 here

    请参阅here 了解何时获得副本而不是视图。

    【讨论】:

    • 或者干脆df.ix[0,'A']
    • 请注意,df[0]['A'] 实际上是没有意义的,因为此语法按名称访问列,并且 df 中不存在名称为 0 的列。
    【解决方案2】:

    请参阅文档的selecting ranges 部分。如前所述:

    使用 DataFrame,在 [] 内部切片会切片行。这主要是为了方便,因为它是一种常见的操作。

    另一方面,这是不一致的。

    值得一提的是,您通常可以使用 loc/iloc 进行显式处理:

    In [11]: df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=['A', 'B'])
    
    In [12]: df['A']
    Out[12]: 
    0    1
    1    3
    2    5
    Name: A, dtype: int64
    
    In [13]: df.loc[:, 'A']  # equivalently
    Out[13]: 
    0    1
    1    3
    2    5
    Name: A, dtype: int64
    
    In [14]: df.iloc[:, 0]  # accessing column by position
    Out[14]: 
    0    1
    1    3
    2    5
    Name: A, dtype: int64
    

    值得一提的是切片的另一个不一致:

    In [15]: df.loc[0:1, 'A']
    Out[15]: 
    0    1
    1    3
    dtype: int64
    
    In [16]: df.iloc[0:1, 0]  # doesn't include 1th row
    Out[16]: 
    0    1
    dtype: int64
    

    要使用位置和标签进行选择,请使用 ix:

    In [17]: df.ix[0:1, 'A']
    Out[17]: 
    0    1
    1    3
    Name: A, dtype: int64
    

    注释标签优先于 ix。

    值得强调的是,分配必须与一个 loc/iloc/ix 一起使用,但在链接时可能会失败:

    In [18]: df.ix[0:1, 'A'] = 7  # works
    
    In [19]: df['A'][0:1] = 7  # *sometimes* works, avoid!
    

    【讨论】:

    • 安迪,重新链接,应该避免 DF[col][row] 是对的,还是只有在切片时,即 DF[col][row1:row2] ??跨度>
    • @WoodyPride 如果您正在执行分配链接,则不能保证有效。我会避免DF[col][row] :)
    • 这是一个打击!我现在必须回去检查一年的工作量。哎呀!
    • @WoodyPride is mentioned in docs "这有时可以工作,但不能保证,因此应该避免",绝对值得检查,因为如果它失败 - 它会默默地失败。
    • 同意,遗憾的是,我阅读文档是为了寻找我想要的信息而不是我需要的信息!
    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多