如何将Tradingview API返回的Pandas DataFrame的Datetime索引转为独立列
问题描述
刚学Python几周,昨晚开始被一个看似简单的问题卡壳了。我通过Tradingview API下载数据并存到Pandas DataFrame里,这个DataFrame有6列,但Datetime数据是索引不是列,想知道怎么把Datetime提取成单独的列。
我的代码如下:
# import lib from tvDatafeed import TvDatafeed, Interval # login tradingview api tv = TvDatafeed() # download data us500 = tv.get_hist(symbol='US500',exchange='GLOBALPRIME', interval=Interval.in_1_minute,n_bars=1000) # show dataframe us500
输出结果:
symbol open high low close volume datetime 2022-09-26 22:54:00 GLOBALPRIME:US500 3653.90 3654.20 3653.70 3654.10 68.0 2022-09-26 22:55:00 GLOBALPRIME:US500 3654.10 3654.40 3653.65 3653.90 87.0 2022-09-26 22:56:00 GLOBALPRIME:US500 3653.95 3654.05 3653.75 3653.90 46.0 2022-09-26 22:57:00 GLOBALPRIME:US500 3653.90 3654.70 3653.90 3654.50 81.0 2022-09-26 22:58:00 GLOBALPRIME:US500 3654.70 3654.95 3653.30 3653.65 107.0 ... ... ... ... ... ... 2022-09-27 16:28:00 GLOBALPRIME:US500 3686.35 3686.50 3682.35 3683.55 1049.0 2022-09-27 16:29:00 GLOBALPRIME:US500 3683.70 3684.80 3681.10 3681.50 1067.0 2022-09-27 16:30:00 GLOBALPRIME:US500 3681.60 3688.35 3681.60 3688.00 1111.0 2022-09-27 16:31:00 GLOBALPRIME:US500 3688.00 3690.35 3686.45 3687.85 1246.0 2022-09-27 16:32:00 GLOBALPRIME:US500 3688.10 3690.75 3688.10 3690.00 139.0 1000 rows × 6 columns
解决方案
有两种简单的方法可以把Datetime索引转为单独的列:
方法1:使用reset_index()
这是最直接的方法,会把索引转为列,同时生成默认的整数索引:
# 将datetime索引转为列,同时重置索引 us500 = us500.reset_index()
执行后,DataFrame会新增一列datetime,原来的datetime索引会被替换成从0开始的整数索引。
方法2:直接赋值列(保留原索引)
如果想保留原来的datetime索引,同时新增一列存储datetime数据,可以直接赋值:
# 新增datetime列,值为原索引 us500['datetime'] = us500.index
操作后,原有的datetime索引不变,DataFrame会多一列datetime存储相同的时间数据。
额外提示
如果转成列后需要调整datetime格式,可以用Pandas的dt属性处理,比如提取日期或时间:
# 提取日期部分 us500['date'] = us500['datetime'].dt.date # 提取时间部分 us500['time'] = us500['datetime'].dt.time
内容的提问来源于stack exchange,提问作者zookeeper85
相关产品推荐
相关产品推荐

