#python #pandas #dataframe
Вопрос:
У меня есть фрейм данных pandas, который в настоящее время не имеет определенного индекса (таким образом, при печати создается автоматический индекс, который начинается с 0). Теперь я хотел бы иметь индекс «временного интервала», который начинается с 1, и дополнительный столбец «время суток» во фрейме данных. Здесь вы можете увидеть скриншот того, как должен выглядеть выходной csv. Можете ли вы сказать мне, как это сделать?
Комментарии:
1. Я не понизил голос, но, пожалуйста, не могли бы вы обновить свой пост с помощью входного фрейма данных в виде обычного текста (только левый фрейм данных)?
Ответ №1:
Попробуйте с pd.date_range
:
df['time of day'] = pd.date_range('1970-1-1', periods=len(df), freq='H') .strftime('%H:%M')
Установка:
df = pd.DataFrame(np.random.randint(1, 50, (30, 2)), columns=['Column 1', 'Column 2']) df.insert(0, 'time of day', pd.date_range('1970-1-1', periods=len(df), freq='H').strftime('%H:%M')) df.index.name = 'timeslot' df.index = 1 print(df) # Output: time of day Column 1 Column 2 timeslot 1 00:00 43 33 2 01:00 20 11 3 02:00 40 10 4 03:00 19 28 5 04:00 10 27 6 05:00 27 10 7 06:00 1 10 8 07:00 33 36 9 08:00 32 2 10 09:00 23 32 11 10:00 1 17 12 11:00 48 42 13 12:00 21 3 14 13:00 48 28 15 14:00 41 46 16 15:00 48 43 17 16:00 47 6 18 17:00 33 21 19 18:00 38 19 20 19:00 17 40 21 20:00 8 24 22 21:00 28 22 23 22:00 2 13 24 23:00 24 3 25 00:00 4 1 26 01:00 8 9 27 02:00 19 36 28 03:00 30 36 29 04:00 43 39 30 05:00 43 3
Комментарии:
1. Спасибо за ваш комментарий, Корралиен. На самом деле у меня есть 2 замечания: 1) Как я могу переместить новый созданный фрейм данных на вторую позицию (должен быть второй столбец) 2) Как я могу дать имя первому столбцу?
2. @PeterBe. Я обновил свой ответ. Не могли бы вы проверить мою демо-версию, пожалуйста? Это то, чего ты ожидаешь?
3. Большое спасибо за вашу огромную помощь. Я проголосовал за ваш ответ и принял его. Просто из любопытства: почему вы указываете
1970-1-1
, например, дату, а не текущую дату?4. Кажется излишним использовать datetime только для преобразования int в строку :p
5. @PeterBe. Дата не имеет значения, потому что мы сохраняем только время.
Ответ №2:
Предполагая, что ваш фрейм данных df
:
df['time of day'] = df.index.astype(str).str.rjust(2, '0') ':00' df.index = 1
вывод: Вывод отсутствует, так как ввод текста не был предоставлен
если имеется более 24 строк:
df['time of day'] = (df.index$).astype(str).str.rjust(2, '0') ':00' df.index = 1