重命名 pandas.concat 的 DataFrame 输出上的列

Renaming columns on DataFrame output of pandas.concat

提问人:Thomas Murphy 提问时间:12/12/2016 最后编辑:Ignacio AlorreThomas Murphy 更新时间:8/19/2022 访问量:34129

问:

我正在通过连接其他 DataFrame 的列来构建一个新的 DataFrame,如下所示:

pairs = pd.concat([pos1['Close'], pos2['Close'], pos3['Close'], pos4['Close'], pos5['Close'],
                  pos6['Close'], pos7['Close']], axis=1)

我想将 Dataframe 的所有列重命名为标的证券的符号。有没有办法在 concat 方法调用期间执行此操作?在这里阅读有关该方法的文档 http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.concat.html 并没有给我一个可靠的答案。pairs

蟒蛇 熊猫

评论

0赞 EdChum 12/12/2016
您需要将其作为后处理步骤或链式调用来执行
0赞 Thomas Murphy 12/12/2016
@EdChum 因此,设置一个字符串列表并执行枚举调用: pairs.columns.values[idx] = symbol ?
0赞 EdChum 12/12/2016
你应该使用,或者如果你知道最终的顺序,那么做一个列表理解和调用,你也可以使用rename(columns=some_dict)pairs.columns = your_listrename_axis
0赞 EdChum 12/12/2016
看这个: stackoverflow.com/questions/11346283/...
0赞 Thomas Murphy 12/12/2016
重命名方法不起作用,因为所有列的值都是“Close”,因此传入的任何值都会同时重命名所有列......因此,必须使用IDX。

答:

12赞 Thomas Murphy 12/12/2016 #1

这就是我正在采取的方法。似乎符合我的所有要求。

symbols = ['JPM', 'WFC', 'BAC', 'C', 'STI', 'PNC', 'CMA']

pairs.columns = symbols

评论

1赞 EdChum 12/12/2016
你可以做,直接分配给底层的numpy数组表示可能并不总是有效pairs.columns = symbols
0赞 Thomas Murphy 12/13/2016
@EdChum 你能举个例子说明什么时候它不起作用吗?最好对此线程进行完整的讨论。
0赞 EdChum 12/13/2016
这里的问题是,它返回了一个基础值的 np 数组,这里我们进入了未知区域,因为我们不知道您返回的是视图还是数据副本。通常,应始终使用提供的方法来进行此类操作,以避免这种歧义.values
0赞 Thomas Murphy 12/14/2016
@EdChum 为反映该反馈而编辑
21赞 Ignacio Alorre 2/27/2021 #2

您可以使用以下属性一次性实现相同的目标:keys

pairs = pd.concat([pos1['Close'], pos2['Close'], pos3['Close'], pos4['Close'], pos5['Close'], pos6['Close'], pos7['Close']],  
axis=1, keys= ['JPM', 'WFC', 'BAC', 'C', 'STI', 'PNC', 'CMA'])

评论

2赞 huang 8/30/2022
就我而言,它只是为我的列添加了一个新级别。