Python 是否有更改熊猫系列名称的功能

Python 是否有更改熊猫系列名称的功能,python,pandas,Python,Pandas,对于Series是否有与数据帧重命名(columns=newcolumns)等效的名称?我在想象这样的事情 def rename(self, name = None): self.name = name 编辑:我不知道为什么这会遭到否决票。我认为这是一件值得怀疑的事情。我更喜欢函数式编程,尽可能避免使用类似于myseries.name=“newname”的语句。这种编程风格在Pandas API中通常得到很好的支持(例如,在大多数函数中默认情况下,inplace=False),我只是想

对于Series是否有与数据帧重命名(columns=newcolumns)等效的名称?我在想象这样的事情

def rename(self, name = None):
    self.name = name

编辑:我不知道为什么这会遭到否决票。我认为这是一件值得怀疑的事情。我更喜欢函数式编程,尽可能避免使用类似于
myseries.name=“newname”
的语句。这种编程风格在Pandas API中通常得到很好的支持(例如,在大多数函数中默认情况下,
inplace=False
),我只是想知道是否有一种方法可以以我刚刚错过的函数方式更新序列名。(否则我将提交一个功能请求)。

IIUC您需要Pandas.Series、pd.Series的重命名功能。Series有两种重命名方法:但它们都不能满足您的要求。您可以更改通用样式的系列名称:

e = pd.Series(np.arange(10), name='test')
In [95]: e
Out[95]:
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: test, dtype: int32

e.name = 'new'
In [97]: e
Out[97]:
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: new, dtype: int32
但是,如果您需要功能性样式,您需要在将来的realeses中请求该功能(似乎很容易实现,只需为
.rename
方法添加一个关键字即可)。

更新 从最新的方法
Series.rename
开始,当传递一个标量时,它会完全满足您的需要;返回具有新名称的新系列

sr.pipe(lambda sr: pd.Series(sr,name='new name'))
下面的内容有时是正确的,但不再相关

以前的职位 我自己偶然发现了这个问题,发现API没有以方法链接的方式涵盖更改
Series.name
的用例,这让我非常沮丧

我发现了两个棘手的问题

  • 如果所讨论的序列是减少数据帧的列(行值)的结果,即使用返回标量的函数对数据帧调用apply

    # this returns a series where series.name == df.index.name, not what we want.
    df.apply(lambda row: series-to-scalar(row),axis=1)
    
    您可以使用
    DataFrame转换数据帧。通过让
    func
    返回由新名称索引的单个值序列来应用
    ,然后使用
    []
    访问列

    df.apply(lambda row: pd.Series(series-to-scalar(row),index=['new name']),axis=1)['new name']
    
    df.assign(**{'new name': lambda df: df.apply(lambda row: row-to-scalar(row),axis=1)})['new name']
    
    或者在数据框中添加一个名为的新列,然后使用
    []
    访问该列

    df.apply(lambda row: pd.Series(series-to-scalar(row),index=['new name']),axis=1)['new name']
    
    df.assign(**{'new name': lambda df: df.apply(lambda row: row-to-scalar(row),axis=1)})['new name']
    
  • 如果您无法控制序列的来源,并且需要链接方法来更改其名称,请使用
    series.pipe
    新名称从原始序列创建新序列

    sr.pipe(lambda sr: pd.Series(sr,name='new name'))
    
  • 希望这有帮助。祝您在功能请求方面好运