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

问题描述 投票:0回答:2

系列有相同的DataFrame.rename(columns = newcolumns)吗?我想象的东西

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

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

python pandas
2个回答
2
投票

更新

从最近的documentation开始,Series.rename方法在通过标量时完全符合你的要求;返回一个新名称的新系列。

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

Previous post

我自己偶然发现了这个问题,并且发现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返回由新名称索引的单个值系列,然后使用[]访问该列。 df.apply(lambda row: pd.Series(series-to-scalar(row),index=['new name']),axis=1)['new name'] 或者向数据框添加一个名为new name的新列,然后使用[]访问该列。 df.assign(**{'new name': lambda df: df.apply(lambda row: row-to-scalar(row),axis=1)})['new name']
  2. 如果您无法控制系列的来源,并且您需要链接方法来更改其名称,请使用Series.pipe创建一个新系列,并使用新名称创建原始系列。 sr.pipe(lambda sr: pd.Series(sr,name='new name'))

希望这可以帮助。祝福功能请求好运。


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方法添加一个关键字)。

© www.soinside.com 2019 - 2024. All rights reserved.