#python #pandas #dataframe #slice
#python #панды #фрейм данных #срез
Вопрос:
Я работаю с фреймом данных, который выглядит следующим образом:
Date Close
1 2020.01.02 00:00 1.12142
2 2020.01.02 01:00 1.12187
3 2020.01.02 02:00 1.12182
4 2020.01.02 03:00 1.12209
5 2020.01.02 04:00 1.12221
В этом фрейме данных дата содержит дату И час.
Но я хочу создать другой фрейм данных с разными столбцами для даты и часа, который выглядит следующим образом:
Date Hour Close
1 2020.01.02 00:00 1.12142
2 2020.01.02 01:00 1.12187
3 2020.01.02 02:00 1.12182
4 2020.01.02 03:00 1.12209
5 2020.01.02 04:00 1.12221
Может кто-нибудь сказать мне, как это сделать «легко», пожалуйста?
Комментарии:
1. Почему вы не используете
datetime
иtimedelta
не вводите вместо строк?2. Поскольку это файл данных, который я не создавал сам, а просто загрузил его, и мне нужно отформатировать этот столбец. Я знаю, как это сделать, используя списки, но я пытаюсь сделать это «напрямую» с другим фреймом данных, чтобы не терять время. Вы знаете, как это сделать?
Ответ №1:
Давайте попробуем to_datetime
s = pd.to_datetime(df['Date'], format='%Y.%m.%d %H:%M')
df['Date'] = s.dt.date
df['Hour'] = s.dt.strftime('%H:%M')
df
Out[20]:
Date Close Hour
1 2020-01-02 1.12142 00:00
2 2020-01-02 1.12187 01:00
3 2020-01-02 1.12182 02:00
Комментарии:
1. Я не смог реализовать это решение. Я не знаю, как заставить это работать. В любом случае спасибо.
Ответ №2:
Вы можете сделать:
df.rename(columns={'Date':'DateOld'}, inplace=True)
df['Date'] = df['DateOld'].apply(lambda row: row.split(' ')[0])
df['Hour'] = df['DateOld'].apply(lambda row: row.split(' ')[-1])
Но я могу порекомендовать использовать datetime
объекты вместо строк, как указано в комментариях.
Комментарии:
1. Когда я это делаю, я получаю KeyError: ‘DateOld’
2. Я решил эту небольшую ошибку, просто используя новый фрейм данных для хранения «новых» 3 столбцов, так что большое спасибо.