У меня есть список фреймов данных, и я хочу отсортировать порядок их расположения в списке.
Каждый фрейм данных имеет такую же структуру, как показано ниже.
df1 = pd.DataFrame.from_dict({'Ch1': {0: -28, 1: -36, 2: -39, 3: -16}, 'Ch2': {0: 543, 1: 547, 2: 559, 3: 561}, 'Ch3': {0: -126, 1: -131, 2: -147, 3: -149}, 'time': {0: '2022-02-10 16.37.25.502', 1: '2022-02-10 16.37.25.502', 2: '2022-02-10 16.37.25.502', 3: '2022-02-10 16.37.25.502'}})
df2 = pd.DataFrame.from_dict({'Ch1': {0: 81, 1: 70, 2: 70, 3: 75}, 'Ch2': {0: 570, 1: 559, 2: 554, 3: 565}, 'Ch3': {0: -103, 1: -120, 2: -131, 3: -122}, 'time': {0: '2022-02-11 05.29.28.116', 1: '2022-02-11 05.29.28.116', 2: '2022-02-11 05.29.28.116', 3: '2022-02-11 05.29.28.116'}})
df3 = pd.DataFrame.from_dict({'Ch1': {0: -887, 1: -887, 2: -890, 3: -898}, 'Ch2': {0: 1307, 1: 1292, 2: 1301, 3: 1307}, 'Ch3': {0: 59, 1: 61, 2: 57, 3: 55}, 'time': {0: '2022-02-08 01.12.54.578', 1: '2022-02-08 01.12.54.578', 2: '2022-02-08 01.12.54.578', 3: '2022-02-08 01.12.54.578'}})
df_list = [df1,df2,df3]
значения в столбце «время» не меняются в каждой строке в одном и том же фрейме данных.
Я хочу, чтобы кадры данных в списке были отсортированы по времени (с первого по последний), чтобы дальнейшая обработка могла совпадать с другими данными.
моя попытка до сих пор.
for i in df_list:
b = pd.to_datetime(i['time'].iloc[0]) #grab the first cell that contains the time stamp
b = b.sort_values(by('time'))
возвращает следующую ошибку ValueError: («Неизвестный формат строки:», «2022-02-05 08.03.09.794»)
Я ожидаю, что кадры данных появятся в списке, где df3 будет первым, df1, вторым и df2 последним. У меня идет столбец времени, и его нужно удалить для других операций, поэтому я бы хотел, чтобы они уже были отсортированы во временном порядке.
Любые альтернативные подходы с предложением помощи приветствуются
Логика непонятна, если у вас уникальные даты, зачем сортировать?
Если вы хотите отсортировать строки каждого фрейма данных, вам нужно указать точный формат даты и времени, и вы должны отсортировать на месте:
for d in df_list:
d['time'] = pd.to_datetime(d['time'], format='%Y-%m-%d %H.%M.%S.%f')
d.sort_values(by='time', inplace=True)
Или, если вы хотите отсортировать кадры данных в списке, который совершенно другой, используйте:
df_list.sort(key=lambda d: d['time'].iloc[0])
Вы должны иметь возможность сортировать, используя строку из-за вашего конкретного формата (при условии, что ГГГГ-ММ-ДД).
Чтобы обеспечить сортировку по дате и времени (например, если формат был ММ-ДД-ГГГГ):
df_list.sort(key=lambda d: pd.to_datetime(d['time'].iloc[0], format='%Y-%m-%d %H.%M.%S.%f'))
Можете ли вы предоставить ожидаемый результат?