python - 如何将 TD Ameritrade 的 API 时间戳转换为 pandas 日期时间?
问题描述
我正在尝试使用 pandas 数据框从我从 TD Ameritrade 的 API 中提取的股票价格数据中创建时间序列可视化。为了做到这一点,我一直在尝试将datetime
我的数据框列中的时间戳转换为 datetime 对象。这样,我可以将 datetime 列设置为新索引,并使用格式清晰的 x 轴进行可视化。
open high low close volume datetime
0 336.89 336.90 336.69 336.77 26232 1599822000000
1 336.90 337.05 336.69 336.92 13180 1599822300000
2 336.98 337.24 336.98 337.23 31810 1599822600000
3 337.01 337.25 337.00 337.15 8749 1599822900000
4 337.10 337.10 336.70 336.70 9664 1599823200000
.. ... ... ... ... ... ...
我已经尝试通过此线程中的建议来实现这一点,但无济于事。我也尝试过使用以下代码:
df['adj_datetime'] = pd.to_datetime((df['datetime']/1000))
然而,结果如下:
open high ... datetime adj_datetime
0 336.89 336.90 ... 1599822000000 1970-01-01 00:00:01.599822000
1 336.90 337.05 ... 1599822300000 1970-01-01 00:00:01.599822300
2 336.98 337.24 ... 1599822600000 1970-01-01 00:00:01.599822600
3 337.01 337.25 ... 1599822900000 1970-01-01 00:00:01.599822900
4 337.10 337.10 ... 1599823200000 1970-01-01 00:00:01.599823200
.. ... ... ... ... ...
这不是我要寻找的结果,因为 1.) 此数据来自 2020-09-11 和 2.) 这不是延长时间的交易数据,因此上午 12:01 不是合适的时间。
任何建议、反馈或其他资源将不胜感激!
解决方案
问题
pd.to_datetime中的默认时间单位为纳秒 (ns),但您的datetime
列的时间戳以毫秒 (ms) 为单位。
解决方案
指定参数unit=ms
以便pd.to_datetime
正确解释时间戳。
>>> pd.to_datetime(1599822000000, unit='ms')
Timestamp('2020-09-11 11:00:00')
也可以使用pd.Timestamp
>>> pd.Timestamp(1599822000000, unit='ms')
Timestamp('2020-09-11 11:00:00')
推荐阅读
- java-8 - 我们在 Java 8 中有 setCurrentMillisFixed 吗?
- java - 在 Android 中从 JSON 文件生成菜单项
- vba - 如何自动调整扩展行的大小?
- android - 如何使用retrofit2将json数据发布到android中的服务器?
- java - java中的引导初始化程序错误是什么
- reactjs - React 应用程序无法在 Internet Explorer 上为 prod 环境工作
- android - 在android的Webview中加载sdcard pdf文件
- mysql - MySQL条件取决于列值
- eclipse - 无法在 Eclipse Oxygen 中配置 Oracle weblogic 10gR3 服务器
- javascript - 拆分登陆页面(HTML、CSS、JavaScript)