【问题标题】:What is the name parameter in Pandas Series?Pandas 系列中的 name 参数是什么?
【发布时间】:2015-09-26 07:58:42
【问题描述】:

Series的文档中没有说明namefastpath的使用参数。他们是做什么的?

【问题讨论】:

  • 如果使用df.ix[0]DataFrame 中切出一行,则生成的对象是Series,原始索引为name 属性。 fastpath我还没遇到过。
  • @Finwood 你能举个例子吗?
  • name 是系列的一个属性,它在 name 是列名的 df 中变得更加重要。我不能明确说出fastpath 的用途,但查看源代码它是一个内部标志,用于测试数据是否是同质数组以使某些结构短路

标签: python numpy pandas


【解决方案1】:

“name”参数还有另一种用法。我举个例子。在本例中,我们将看到参数 'name' 可以用作值的索引名称。

purchase_1 = pd.Series({'Name': 'JJ',
                        'Item': 'A',
                        'Cost': 22.00})
purchase_2 = pd.Series({'Name': 'KK',
                        'Item': 'B',
                        'Cost': 22.50})

dfn = pd.DataFrame([purchase_1, purchase_2], index=['Store X', 'Store Y'])

dfn = dfn.append(pd.Series(data={'Cost': 30.00, 'Item': 'C','Name': 'TT'}, name='Store Y'))
dfn



Out[3]: 
         Cost Item Name
Store X  22.0    A   JJ
Store Y  22.5    B   KK
Store Y  30.0    C   TT

【讨论】:

  • 虽然我理解这个的用法,但我一直发现pandas在这里错误地混合了概念。我理解他们支持 df.append(pd.Series) 用于单索引和多索引数据帧的理由,但他们不应该引入另一个属性吗?在我看来,如果将属性拆分为 name_index、name_value/index_value,多索引数据帧的代码会更清晰。例如,在您描述的情况下:如果您将数据框的索引命名为“store_idx”,则该系列的属性应为:name_index=”store_idx”, name_value/index_value=”Store Y”
【解决方案2】:

除了所有信息之外,我刚刚了解到,当您必须使用 Series 追加一行时,有两个选项: 1)ignore_index = True,在这种情况下,它将删除设置的索引并将其重置为数字索引(默认) 2)使用名称有助于保持当前数据帧结构,并使用名称参数作为多索引(按顺序)。

【讨论】:

    【解决方案3】:

    name 参数允许您为 Series 对象(即列)命名。这样,当您将其放入 DataFrame 时,该列将根据 name 参数命名。

    示例:

    In [1]: s = pd.Series(["A","B","C"], name="foo")
    
    In [2]: s
    Out[2]: 
    0    A
    1    B
    2    C
    Name: foo, dtype: object
    
    In [3]: pd.DataFrame(s)
    Out[4]: 
      foo
    0   A
    1   B
    2   C
    

    如果您没有将name 指定给您的Series,它将自动命名。这将是dataframe 对象中的0

       0
    0  A
    1  B
    2  C
    

    对于fastpath,它是一个内部参数,并且已经报告了一个问题:

    https://github.com/pydata/pandas/issues/6903

    【讨论】:

      【解决方案4】:

      pd.Seriesname 在您将它们连接在一起时变成 column name。反之亦然,当您从dataframe 中提取列时,它会将column name 作为提取的pd.Series 的名称。

      import pandas as pd
      import numpy as np
      
      s1 = pd.Series(np.random.randn(10), name='series1')
      s2 = pd.Series(np.random.randn(10), name='series2')
      pd.concat([s1, s2], axis=1)
      
      Out[16]: 
         series1  series2
      0   0.3499   0.3017
      1  -2.2980  -1.1121
      2  -1.4517  -0.5107
      3  -0.4596  -0.0855
      4  -0.3230   0.5391
      5  -0.1764  -0.3218
      6   2.4806  -0.6129
      7   1.6766   1.1408
      8  -1.2407   0.4857
      9   0.3587  -1.5752
      

      【讨论】:

        猜你喜欢
        • 2020-02-18
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        相关资源
        最近更新 更多