Преобразование времени эпохи в местное время - PullRequest
0 голосов
/ 13 октября 2018

У меня есть датафрейм pandas, и один из столбцов - это время, представленное как время эпохи.Фрейм данных выглядит следующим образом:

0    1539340322842
1    1539340426841
2    1539340438482
3    1539340485658
4    1539340495920
Name: Time, dtype: int64

Я пробовал это df["local_time"] = df.epoch_time.dt.tz_localize("UTC"), но это не дает мне результат по местному времени.Это результат вышеуказанной операции:

                        local_time  
0 1970-01-01 00:25:39.340322842+00:00  
1 1970-01-01 00:25:39.340426841+00:00  
2 1970-01-01 00:25:39.340438482+00:00  
3 1970-01-01 00:25:39.340485658+00:00  
4 1970-01-01 00:25:39.340495920+00:00  

Другая вещь, которая дала мне желаемый результат, такова:

def convert_time(x):                                              
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x/1000)) 

df["local_time"] = df["epoch_time"].apply(convert_time)

Есть ли в любом случае, что я могу векторизовать вышеуказанную операциюполучить дату и время в нужном мне формате?

1 Ответ

0 голосов
/ 13 октября 2018

IIUC, я думаю, вам нужны панды to_datetime с units='s':

pd.to_datetime(df.Time/1000,unit='s')
0   2018-10-12 10:32:02.842000008
1   2018-10-12 10:33:46.841000080
2   2018-10-12 10:33:58.482000113
3   2018-10-12 10:34:45.657999992
4   2018-10-12 10:34:55.920000076
Name: Time, dtype: datetime64[ns]

или с использованием astype в качестве:

((df.Time)/1000).astype("datetime64[s]")
0   2018-10-12 10:32:02
1   2018-10-12 10:33:46
2   2018-10-12 10:33:58
3   2018-10-12 10:34:45
4   2018-10-12 10:34:55
Name: Time, dtype: datetime64[ns]

или

pd.to_datetime(df.Time/1000,unit='s',utc=True)
0   2018-10-12 10:32:02.842000008+00:00
1   2018-10-12 10:33:46.841000080+00:00
2   2018-10-12 10:33:58.482000113+00:00
3   2018-10-12 10:34:45.657999992+00:00
4   2018-10-12 10:34:55.920000076+00:00
Name: Time, dtype: datetime64[ns, UTC]

Поскольку 'Asia/Kolkata' впереди 05:30:00, просто добавьте Timedelta:

pd.to_datetime(df.Time/1000,unit='s')+pd.Timedelta("05:30:00")
0   2018-10-12 16:02:02.842000008
1   2018-10-12 16:03:46.841000080
2   2018-10-12 16:03:58.482000113
3   2018-10-12 16:04:45.657999992
4   2018-10-12 16:04:55.920000076
Name: Time, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...