更改 DataFrame 的列标题

Changing column headers of dataframe

提问人:AndysPythonStuff 提问时间:1/7/2023 更新时间:1/7/2023 访问量:48

问:

这可能是一个简单的答案,但我被难住了。 因此,我使用雅虎下载称为“组件”的公司代码列表的天数价格。组件如下所示;(但有 91 个条目)。

components = ['ABEV3.SA', 'ALPA4.SA', 'AMER3.SA']

todays_data = yf.download(components, period= '1d')

从结果表中,我拉出调整后的收盘价并制作了一个新的数据帧:

close = todays_data['Adj Close']

这将产生一个名为“close”的水平 1 行、91 列数据帧:

ABEV3.SA ALPA4.SA AMER3.SA
日期
2023-01-06 14.24 13.91 10.13

Id 想要得到的是一个垂直数据帧,索引列是公司代码,列包含价格。

我用过:

close.transpose()

它以 Id 的方式创建垂直表格,91 行,有 1 列,但列标题是公司代码列表上方的“日期”(我猜是索引),价格上方是“2023-01-06”。

日期 2023-01-06
ABEV3.SA 14.24
ALPA4.SA 13.91
AMER3.SA 10.13

如何将“Date”和“2023-01-6”更改为“Code”和“Close”?

我尝试了变体

close.rename()

close.rename(columns= {'2023-01-06 00:00:00':'Close'})

但是不断出现错误,比如这样?“IndexError:数组索引过多”。

也许与值列的标题(价格)是时间戳有关?[时间戳('2023-01-06 00:00:00')]

有人帮忙吗?谢谢。。。

Python 熊猫 数据帧 yfinance

评论


答:

0赞 Chrysophylaxs 1/7/2023 #1

Date似乎是列索引的名称,发生这种情况是因为它是转置之前行索引的名称。

因此,我们需要删除列索引名称,为行索引指定一个新名称,并更改列索引本身:

import pandas as pd

df = pd.DataFrame(
    [14.24, 13.91, 10.13],
    index=["ABEV3.SA", "ALPA4.SA", "AMER3.SA"],
    columns=pd.Index([pd.Timestamp("2023-01-06")], name="Date")
)
# Date      2023-01-06
# ABEV3.SA       14.24
# ALPA4.SA       13.91
# AMER3.SA       10.13

df = df.rename_axis(None, axis=1)
#           2023-01-06
# ABEV3.SA       14.24
# ALPA4.SA       13.91
# AMER3.SA       10.13

df = df.rename_axis("Code", axis=0)
#           2023-01-06
# Code
# ABEV3.SA       14.24
# ALPA4.SA       13.91
# AMER3.SA       10.13

df = df.rename(columns={pd.Timestamp("2023-01-06"): "Close"})
#           Close
# Code
# ABEV3.SA  14.24
# ALPA4.SA  13.91
# AMER3.SA  10.13

如果需要,可以将所有这些操作链接在一起

评论

0赞 AndysPythonStuff 1/7/2023
哇。效果很好。非常感谢!永远不会得到那个 pd.timestamp 位。在那里学到了很多东西!
1赞 SomeDude 1/7/2023 #2

您可以执行以下操作:

df.rename_axis('Code').T.rename(columns={'2023-01-06':'Close'})