В чем разница перевода метки времени между пандами и time.strftime - PullRequest
0 голосов
/ 18 октября 2019

Я обрабатываю метку времени с помощью 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 голосов
/ 18 октября 2019

Это потому, что по умолчанию вы получаете время в 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
0 голосов
/ 18 октября 2019

Это потому, что ваш второй код, конвертирующий время в местное время, пытается использовать это, но 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')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...