В DataFrame df
у меня есть индексный столбец Timestamp
, в нем некоторые значения имеют формат: %Y-%m-%d %H:%M:%S.%f
и другие значения в формате: %Y-%m-%d %H:%M:%S
, из-за чего я также столкнулся с проблемой при сортировке индекса df =df.sort_index()
, а Data Fomat тоже отличается.
Мой код:
import pandas as pd
# Example DataFrame with mixed datetime formats in the index
data = {
'final_lowerband': [None, None, None, 6698.0, 6698.0, 6698.0],
'final_upperband': [None, None, None, None, None, None],
}
index = [
'2024-07-12 20:38:59.667000',
'2024-07-12 19:38:59.957000',
'2024-07-12 19:36:59.897000',
'2024-07-12 19:13:59.870000',
'2024-07-12 18:15:59',
'2024-07-12 21:35:00',
]
df = pd.DataFrame(data, index=index)
# Convert index to DatetimeIndex
df.index = pd.to_datetime(df.index)
# Convert index to desired format
df.index = df.index.strftime('%Y-%m-%d %H:%M:%S.%f')
# Display the DataFrame with the updated index format
print(df)
ОШИБКА 1 для строки: df.index = pd.to_datetime(df.index)
ValueError: time data "2024-07-12 18:15:59" doesn't match format "%Y-%m-%d %H:%M:%S.%f", at position 4. You might want to try:
- passing `format` if your strings have a consistent format;
- passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;
- passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.
ОШИБКА 2 Из строки: df.index = df.index.strftime('%Y-%m-%d %H:%M:%S.%f')
AttributeError: 'Index' object has no attribute 'strftime'
При попытке сортировки индекса без получения ошибки `strfdatetime.
ОШИБКА 3: TypeError: '<' not supported between instances of 'Timestamp' and 'str'
df = df.sort_index()
Ожидаемый результат:
Timestamp final_lowerband final_upperband
2024-07-12 18:15:59 6698.0 NaN
2024-07-12 19:13:59 6698.0 NaN
2024-07-12 19:36:59 NaN NaN
2024-07-12 19:38:59 NaN NaN
2024-07-12 20:38:59 NaN NaN
2024-07-12 21:35:00 6698.0 NaN
Этот код не запускается. ValueError: Length of values (8) does not match length of index (6)
. Пожалуйста, предоставьте минимально воспроизводимый пример с рабочим кодом. Конкретные советы см. в разделе Как сделать хорошие воспроизводимые примеры панд
Если я удалю значения данных, чтобы они соответствовали выходным данным, то pd.to_datetime(df.index)
не удастся: ValueError: time data "2024-07-12 18:15:59" doesn't match format "%Y-%m-%d %H:%M:%S.%f", at position 4.
[...]. Это может зависеть от версии; Какую версию ты используешь?
Что такое crudeoilm
? Ваш фрейм данных называется df
.
Также прочтите Как спрашивать , чтобы получить советы, например, как написать хороший заголовок. Возможно, вы захотите спросить что-то вроде: «Почему некоторые из моих значений индекса все еще отображаются после to_datetime()
?» хотя проблема станет яснее, как только вы создадите минимально воспроизводимый пример :)
все исправлено!!!
В Pandas 2.0 выше вы можете передать параметр mixed
в format
.
А также, если вас не волнует часть .f
, как кажется на выходе, она вам не нужна в strftime
. При этом:
df.index = pd.to_datetime(df.index, format='mixed', dayfirst=False).strftime('%Y-%m-%d %H:%M:%S')
df.sort_index()
Было бы лучше сохранить индекс как дату и время, чтобы вы все равно могли, например. повторная выборка. Чтобы сократить доли секунды, используйте df.index.floor('S')
. Ссылка: Как удалить секунды из даты и времени?
Ваш
data
dict содержит больше значений, чем индексов (не связано напрямую, но это вызовет проблемы)