提问人:AndysPythonStuff 提问时间:1/7/2023 更新时间:1/7/2023 访问量:48
更改 DataFrame 的列标题
Changing column headers of dataframe
问:
这可能是一个简单的答案,但我被难住了。 因此,我使用雅虎下载称为“组件”的公司代码列表的天数价格。组件如下所示;(但有 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')]
有人帮忙吗?谢谢。。。
答:
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'})
评论