熊猫和time.strftime之间的时间戳转换有什么区别

时间:2019-10-18 03:34:17

标签: python-3.x pandas time

我正在使用pd.to_datetime()处理时间戳,我发现结果不正确? 然后花时间处理,得到不同的结果。哪​​个是正确的结果?

import time
import pandas as pd

df=pd.DataFrame({'times':'1571305233056'},index=['A'])
pd.to_datetime(df.times,unit='ms').dt.strftime('%Y-%m-%d %H:%M:%S')
A    2019-10-17 09:40:33
Name: times, dtype: object

def timestamp( times):
        time1=float(times/1000)
        timearray = time.localtime(time1)
        return time.strftime('%Y-%m-%d %H:%M:%S',timearray)

timestamp(int(df['times'])
'2019-10-17 17:40:33'

我希望输出为'2019-10-17 17:40:33'

2 个答案:

答案 0 :(得分:0)

这是因为您的第二个将时间转换为本地时间的代码尝试使用此代码,但pd.to_datetime在utc中给出了时间

def timestamp( times):
        time1=float(times/1000)
        timearray = time.gmtime(time1)
        return time.strftime('%Y-%m-%d %H:%M:%ST%Z',timearray)

timestamp(int(df['times']))

或者您可以使用df.tz_localize函数获取大熊猫本地时间

import pandas as pd
import dateutil

df=pd.DataFrame({'times':'1571305233056'},index=['A'])
pd.to_datetime(df.times,unit='ms',).dt.tz_localize(dateutil.tz.tzlocal()).dt.strftime('%Y-%m-%d %H:%M:%ST%Z')

答案 1 :(得分:0)

这是因为默认情况下,您可以使用UTC时间。但是,在函数中,您已使用localtime将其转换为函数 您可以直接按照以下步骤进行操作。

pd.to_datetime(df.times,unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai').dt.strftime('%Y-%m-%d %H:%M:%S')

如果您运行以下代码,则可以看到值的差异

df=  pd.DataFrame({'times':'1571305233056'},index=['A'])
print(pd.to_datetime(df.times,unit='ms'))
print(pd.to_datetime(df.times,unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Kolkata'))
print(pd.to_datetime(df.times,unit='ms').dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin'))
print(pd.to_datetime(df.times,unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai'))
print(pd.to_datetime(df.times,unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai').dt.strftime('%Y-%m-%d %H:%M:%S'))

输出

A   2019-10-17 09:40:33.056
Name: times, dtype: datetime64[ns]
A   2019-10-17 15:10:33.056000+05:30
Name: times, dtype: datetime64[ns, Asia/Kolkata]
A   2019-10-17 11:40:33.056000+02:00
Name: times, dtype: datetime64[ns, Europe/Berlin]
A   2019-10-17 17:40:33.056000+08:00
Name: times, dtype: datetime64[ns, Asia/Shanghai]
A    2019-10-17 17:40:33
Name: times, dtype: object

您可以找到

可用的所有时区的列表
import pytz
pytz.all_timezones