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



我正在用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'

这是因为默认情况下,您获取的时间以 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

那是因为您的第二个代码将时间转换为本地时间尝试使用它,但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')

最新更新