系列是否有DataFrame.rename(columns = newcolumns)
的等价物?我想象的是
def rename(self, name = None):
self.name = name
编辑:我不确定为什么会收到一个downvote。我认为这是一个合理的想法。我更喜欢以功能风格编程,尽可能避免使用myseries.name = "newname"
之类的语句。这种编程风格通常在Pandas API中得到很好的支持,(例如在大多数函数中默认为inplace=False
),我只是想知道是否有一种方法可以以功能的方式更新系列名称错过。 (否则我会提交功能请求)。
答案 0 :(得分:2)
截至最近的documentation方法Series.rename
,当传递标量时,完全符合您的要求;返回包含新名称的新系列。
以下内容在某个时候是正确的,但不再相关。
我自己偶然发现了这个问题,并且发现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.apply
转换数据框,让func
返回由新名称索引的单个值系列,然后使用{{1}访问该列}。
[]
或向数据框添加名为新名称的新列,然后使用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
希望这会有所帮助。祝福功能请求好运。
答案 1 :(得分:0)
IIUC你需要为Pandas.Series重命名函数.pd.Series有两种重命名方法:rename和rename_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
方法添加一个关键字)。