【问题标题】:Issue with datetime remaining at epoch时代剩余日期时间的问题
【发布时间】:2018-07-07 00:42:57
【问题描述】:

我有一个数据框,其中一列填充了毫秒,我已经能够将其转换为日期时间格式。问题是,对于两年的数据,从 2017 年到 2018 年,时间输出保持在 1970 年 1 月 1 日。输出日期时间如下所示:

27 1970-01-01 00:25:04.232399999

28 1970-01-01 00:25:04.232699999

29 1970-01-01 00:25:04.232999999

                 ...             

85264 1970-01-01 00:25:29.962799999

85265 1970-01-01 00:25:29.963099999

85266 1970-01-01 00:25:29.963399999

在我看来,从 1504224299999 开始到 1529971499999 结束的毫秒数被添加到纪元的第 10 个小时,并不代表它应该代表的真实范围。

这是我目前的代码......

import pandas as pd
import MySQLdb
import datetime
from pandas import DataFrame

con = MySQLdb.connect(host='localhost',user='root',db='binance',passwd='abcde')
cur = con.cursor()
ms = pd.read_sql('SELECT close_time FROM btcusdt', con=con)

ms['close_time'].apply( lambda x: datetime.datetime.fromtimestamp(x/1000) )
date = pd.to_datetime(ms['close_time'])
print(date)

我不太确定我哪里出错了,所以如果有人能告诉我我在做什么愚蠢的事情,我将不胜感激。

【问题讨论】:

  • 尝试:ms['close_time'].apply( lambda x: datetime.datetime.fromtimestamp(x/1000) ) ms['close_time'] 的 dtype 是什么??
  • @Mankind_008,它仍然显示 float64, dtype: object & 输出相同的错误
  • @Mankind_008,所以我在使用您的初始代码建议之前添加了这一点,现在我遇到了错误:TypeError: unsupported operand type(s) for /: 'Timestamp' and 'int'跨度>
  • ms['close_time']发布一些虚拟数据
  • @Mankind_008,这是来自数据框,为了可读性添加了逗号:0 1.504224e+12, 1 1.504225e+12, 2 1.504225e+12, 3 1.504225e+12, 4 1.504225e +12, 5 1.504226e+12, 6 1.504226e+12, 7 1.504226e+12

标签: python pandas dataframe types time-series


【解决方案1】:

如果您需要应用不直接支持您的参数的函数,您可以apply it element wise using dummy function lambda

另外,您需要分配回原来的熊猫系列以覆盖它,使用:

ms['close_time'] = ms['close_time'].apply( lambda x: datetime.datetime.fromtimestamp(x/1000) )

如果你想直接使用pandas.to_datetime。使用:

pd.to_datetime(ms['close_time'], unit = 'ms')         

PS.这两种方法得到的datetime可能会有所不同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多