#python #dataframe #jupyter
Вопрос:
У меня есть очень большой набор данных с информацией в разных столбцах в формате ниже.
DATE Data DATE.2 Data2 DATE.3 Data3 DATE.4 Data4 Data5
0 2018-01-01 2.4054 2018-01-02 9.77 2018-01-02 2695.81 2018-01-01 98 358
1 2018-01-02 2.4633 2018-01-03 9.15 2018-01-03 2713.06 2018-01-02 98 355
2 2018-01-03 2.4471 2018-01-04 9.22 2018-01-04 2723.99 2018-01-03 99 348
3 2018-01-04 2.4525 2018-01-05 9.22 2018-01-05 2743.15 2018-01-04 98 340
4 2018-01-05 2.4763 2018-01-08 9.52 2018-01-08 2747.71 2018-01-05 98 336
5 2018-01-08 2.4800 2018-01-09 10.08 2018-01-09 2751.29 2018-01-08 97 335
6 2018-01-09 2.5530 2018-01-10 9.82 2018-01-10 2748.23 2018-01-09 96 333
Я прохожу процесс очистки, и мне нужно, чтобы там была только одна колонка с датой вместо 4. Как вы можете видеть из данных, даты не совпадают в каждой строке, поэтому мне нужно разработать способ получения кода для создания новой строки с N/A в ней, если в соответствующем столбце даты за этот день нет данных.
Например, мне нужен код для написания:
DATE Data Data2 Data3 Data4 Data5
0 2018-01-01 2.4054 N/A N/A 98 358
1 2018-01-02 2.4633 9.77 2695.81 98 355
Кто-нибудь знает, как этого добиться? Заранее спасибо за любые советы/указания.
Ответ №1:
Есть много способов добиться этого.
Вы можете попробовать создать новый фрейм данных, используя свой набор данных.
- Создайте новый фрейм данных с датой столбца и вставьте все даты (дата.2, дата.3 и т.д.) В свой столбец из старого df (фрейм данных).
- Удалите дубликаты в этом столбце (если они существуют)
- Затем создайте столбцы Data, Data2, Data3, Data4 со значением по умолчанию N/A.
- Выберите значения Data, Data2, Data3, Data4, где (данные == new_df.дата ИЛИ данные.2 == new_df.дата …..)
Функции для этих шагов доступны в pandas.
Комментарии:
1. Привет, glory9211, спасибо за совет до сих пор; это было очень полезно. Я немного застрял на пункте 4. Все, что я делаю, в той или иной форме приводит к ошибке. Я попробовал это (новый-это новый фрейм данных): новый[‘Данные’] = np.где(новый[‘Новая дата’] == df[‘ДАТА’], df[‘Данные’]), и он выдает ошибку. У тебя есть какие-нибудь идеи, как это исправить?
2. Можете ли вы поделиться сообщением об ошибке ?
3. Из вашего сообщения я вижу, что вы не определили параметр «y», общий синтаксис-np.where(условие[ x, y]). x выбирается, если условие истинно, иначе y. Читайте примеры здесь geeksforgeeks.org/numpy-where-in-python
4. В конце концов мне удалось разобраться с этим, спасибо за ваши указания.
Ответ №2:
В конце концов мне удалось с этим разобраться:
df_1 = af[['DATE', 'Data']]
df_2 = af[['DATE.2', 'Data2']].rename(columns = {'DATE.2': 'DATE'})
df_3 = af[['DATE.3', 'Data3']].rename(columns = {'DATE.3': 'DATE'})
df_4 = af[['DATE.4', 'Data4', 'Data5']].rename(columns = {'DATE.4': 'DATE'})
new = df_1.merge(df_2, on = 'DATE', how = 'outer').merge(df_3, on = 'DATE', how = 'outer').merge(df_4, on = 'DATE', how = 'outer')
new['Data'].fillna("N/A", inplace = True)
new['Data2'].fillna("N/A", inplace = True)
new['Data3'].fillna("N/A", inplace = True)
new['Data4'].fillna("N/A", inplace = True)
new['Data5'].fillna("N/A", inplace = True)
new