Выбор подстрок во всем фрейме данных

#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 столбцов, так что большое спасибо.