Получить недостающие столбцы из одного кадра данных и добавить его в другой кадр данных - PullRequest
1 голос
/ 16 мая 2019

У меня есть датафрейм df1 со столбцами.Мне нужно сравнить заголовки столбцов в df1 со списком заголовков из df2

df1 =['a','b','c','d','f']
df2 =['a','b','c','d','e','f'] 

Мне нужно сравнить df1 с df2 и, если есть пропущенные столбцы, мне нужнодобавить их к df1 с пустыми значениями.

Я пытался concat, а также append, и оба не работали.с concat я не могу добавить столбец e, а с append он добавляет все столбцы из df1 и df2.Как получить только отсутствующий столбец, добавленный к df1 в том же порядке?

df1_cols = df1.columns
df2_cols = df2._combine_match_columns

if (df1_cols == df2_cols).all():
        df1.to_csv(path + file_name, sep='|')
else:
    print("something is missing, continuing")
    #pd.concat([my_df,flat_data_frame], ignore_index=False, sort=False)
    all_list = my_df.append(flat_data_frame, ignore_index=False, sort=False)

Я хотел бы видеть результаты как

a|b|c|d|e|f - > headers
1|2|3|4||5 -> values

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

pandas.DataFrame.align

df1.align(df2, axis=1)[0]
  • По умолчанию это 'outer' объединяет
  • Указав axis=1, мы фокусируемся на столбцах
  • Это возвращаетtuple обоих выровненных df1 и df2, причем вызывающий информационный кадр является первым элементом.Поэтому я беру первый элемент с [0]

pandas.DataFrame.reindex

df1.reindex(columns=df1.columns | df2.columns)
  • Вы можете рассматривать pandas.Index объекты как наборы большую часть времени,Так что df1.columns | df2.columns - это объединение этих двух индексных объектов.Я тогда reindex используя результат.
0 голосов
/ 16 мая 2019

Давайте сначала создадим два кадра данных как:

import pandas as pd, numpy as np
df1 = pd.DataFrame(np.random.random((5,5)), columns = ['a','b','c','d','f'])
df2 = pd.DataFrame(np.random.random((5,7)), columns = ['a','b','c','d','e','f','g'])

Теперь добавьте те столбцы df2 к df1 (со значениями nan), которых нет в df1:

for i in list(df2):
    if i not in list(df1):
        df1[i] = np.nan

Nowотображать столбцы df1 в алфавитном порядке:

df1 = df1[sorted(list(df1))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...