是否有更改Pandas系列名称的功能

时间:2015-11-26 22:05:29

标签: python pandas

系列是否有DataFrame.rename(columns = newcolumns)的等价物?我想象的是

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

编辑:我不确定为什么会收到一个downvote。我认为这是一个合理的想法。我更喜欢以功能风格编程,尽可能避免使用myseries.name = "newname"之类的语句。这种编程风格通常在Pandas API中得到很好的支持,(例如在大多数函数中默认为inplace=False),我只是想知道是否有一种方法可以以功能的方式更新系列名称错过。 (否则我会提交功能请求)。

2 个答案:

答案 0 :(得分:2)

更新

截至最近的documentation方法Series.rename,当传递标量时,完全符合您的要求;返回包含新名称的新系列。

以下内容在某个时候是正确的,但不再相关。

上一篇文章

我自己偶然发现了这个问题,并且发现API无法涵盖以方法链方式更改Series.name的用例非常令人沮丧。

我发现了两个尴尬的解决办法。

  1. 如果有问题的系列是减少数据帧的列(行值)的结果,即在具有返回标量的函数的数据帧上调用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.apply转换数据框,让func返回由新名称索引的单个值系列,然后使用{{1}访问该列}。

    []

    或向数据框添加名为新名称的新列,然后使用df.apply(lambda row: pd.Series(series-to-scalar(row),index=['new name']),axis=1)['new name'] 访问该列。

    []
  2. 如果您无法控制系列的来源,并且您需要链接方法来更改其名称,请使用df.assign(**{'new name': lambda df: df.apply(lambda row: row-to-scalar(row),axis=1)})['new name'] 使用新名称创建一个新系列。

    Series.pipe
  3. 希望这会有所帮助。祝福功能请求好运。

答案 1 :(得分:0)

IIUC你需要为Pandas.Series重命名函数.pd.Series有两种重命名方法:renamerename_axis但它们都不符合你的意愿。您可以更改共同风格的系列名称:

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

但如果您需要功能样式,则需要在将来的重新定位中请求该功能(它似乎很容易实现,只需为.rename方法添加一个关键字)。