Преобразовать ГГГГММДД в ​​ГГГГ-ММ-ДД и ЧЧММСС в ЧЧ: ММ: СС для построения подсвечника - PullRequest
1 голос
/ 19 апреля 2019

Я пытался найти ответ в течение 4 часов, но не повезло.Любая помощь будет очень ощутимой.

Цель: конвертировать 20170103 в 2017-01-03 и 022100 в 02:21:00 для построения подсвечника

date_int = 20170103
df = pd.DataFrame({'date':[date_int]*10})
df['date'] = df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d'))
print(df['date'])


time_int = 020100
df = pd.DataFrame({'time':[time_int]*10})
df['time'] = df['time'].apply(lambda x: pd.to_datetime(str(x), format='%H:%M:%S'))
print(df['time'])

, но второй код показывает «недопустимый»Ошибка токена.

И я также заметил, что этот код работает очень медленно.Если есть более эффективный способ, пожалуйста, дайте мне знать.Заранее большое спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 19 апреля 2019

Чтобы расширить мои комментарии, у вас есть несколько вещей не так здесь. Во-первых, как уже упоминалось, используемый формат в вашем втором примере неверен. Ваши данные имеют формат '%H%M%S', поэтому вы должны указать их в аргументе.

При использовании pd.to_datetime указанный формат указывает фактический формат данных, чтобы его можно было правильно проанализировать. Для дальнейшей модификации вам необходимо добавить Series.dt.strftime:

date_int = 20170103
df = pd.DataFrame({'date':[date_int]*10})
df.date = pd.to_datetime(df.date, format='%Y%m%d').dt.strftime('%Y-%m-%d')

     date
0  2017-01-03
1  2017-01-03
2  2017-01-03
3  2017-01-03
4  2017-01-03
5  2017-01-03
6  2017-01-03
7  2017-01-03
8  2017-01-03
9  2017-01-03

Так же, для вашего второго примера вам нужно:

df.time = pd.to_datetime(df.time, format='%H%M%S').dt.strftime('%H:%M:%S')
1 голос
/ 19 апреля 2019

Здесь, на основании моего комментария выше. (из-за недопустимой ошибки токена, сделайте строку, заключенную в одинарные или двойные кавычки)

time_int = '020100'
df = pd.DataFrame({'time':[time_int]*10})
df['time'] = df['time'].apply(lambda x: pd.to_datetime(str(x), format='%H%M%S'))
df['time'] = df['time'].dt.time
print(df['time'])

Выход:

0    02:01:00
1    02:01:00
2    02:01:00
3    02:01:00
4    02:01:00
5    02:01:00
6    02:01:00
7    02:01:00
8    02:01:00
9    02:01:00
0 голосов
/ 19 апреля 2019

Я смотрю на вопрос, и похоже, что исходный вопрос состоял из двух тестовых случаев для получения кода с использованием отлаженного пакета panda. Комментарий о том, что код выполняется медленно, предполагает, что файл дат и времени читается Учитывая, что графики свечей можно использовать с объектом datetime, возможно, все это можно решить просто.

При чтении каждой строки извлекайте дату и время как одну строку, например, «20170103 022100». Используйте datetime для непосредственного анализа объекта datetime.

import datetime as dt
ts='20170103    022100'
result=dt.datetime.strptime(ts,'%Y%m%d %H%M%S')

Что приятно в strptime, так это то, что один пробел в формате представляет пробел, поэтому несколько пробелов в строке анализируются правильно.

Надежда, которая упрощает вещи.

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