三行代码  ›  专栏  ›  技术社区  ›  X3VI

熊猫-重命名_轴后无法按预期工作-为什么?

  •  0
  • X3VI  · 技术社区  · 1 月前

    我在阅读pandas文档(给pandas 10分钟)时遇到了这个例子:

    dates = pd.date_range('1/1/2000', periods=8)
    
    df = pd.DataFrame(np.random.randn(8, 4),
                  index=dates, columns=['A', 'B', 'C', 'D'])
    
    s = df['A']
    
    s[dates[5]] 
    # Out[5]: -0.6736897080883706
    

    这很符合逻辑,但如果我自己尝试,然后设置indexname(如下示例),那么我就无法选择带有s[dates[5]的数据。有人知道为什么吗?

    例如

    df = pd.read_csv("xyz.csv").head(100) 
    s = df['price'] # series with unnamed int index + price
    s = s.rename_axis('indexName')
    s[indexName[5]] # NameError: name 'indexName' is not defined
    

    提前谢谢!

    编辑:s.index。name返回indexName,尽管不使用s[indexName[5]]

    2 回复  |  直到 1 月前
        1
  •  0
  •   LarryBird    1 月前

    您混淆了索引的名称和索引值。

    在您的示例中,第一个代码块的运行是因为 dates 是一个变量,所以当你调用 dates[5] 它实际上返回了 日期 对象,它是数据帧中的有效索引值。

    在你自己的尝试中,你指的是 indexName 当你试着跑的时候 s[indexName[5]] ),但是 indexName 在您的环境中不是变量,因此它将抛出一个错误。

    对系列或数据帧的部分进行子集的正确方法是引用索引的实际值,而不是轴的名称。例如,如果您有以下系列:

    s = pd.Series(range(5), index=list('abcde'))
    

    然后索引中的值是 a 通过 e 因此,要对该系列进行子集划分,可以使用:

    s['b']
    

    或者:

    s.loc['b']
    

    还要注意,如果您更喜欢按位置而不是索引值访问元素,可以使用 .iloc 方法因此,要获得第二个元素,可以使用:

    s.iloc[1] # locations 0 is the first element
    

    希望这有助于澄清。我建议你继续学习一些熊猫入门教程,以建立基本的理解。

        2
  •  0
  •   nfn    1 月前

    首先,让我们了解这个例子:

    df[index] 用于选择具有该属性的行 指数 .
    这是 s 数据帧:

    enter image description here

    索引是日期。

    这个 dates[5] 等于'2000-01-06',这是第五行的索引 s df。因此,结果是具有该索引的行。

    在代码中:

    indexName 没有定义。所以 indexName[5] 不代表df的索引。