Объединить два pandas кадра данных, где один является подмножеством другого (или заполнить только подмножество столбцов) - PullRequest
1 голос
/ 25 февраля 2020

Я хочу обновлять лист каждый раз, когда выполняется определенный процесс, но в моих данных отсутствуют некоторые столбцы. Моя идея состояла в том, чтобы получить все имена столбцов из листа, создать пустой фрейм данных с этими столбцами, а затем объединить его с моими фактическими данными (с переименованными столбцами, чтобы они соответствовали столбцам в листе), с отсутствующими полями, имеющими NaN или Нет значение. Идея состоит в том, чтобы заполнить фрейм данных всеми столбцами только доступными данными.

>>> df1
Empty DataFrame
Columns: [col0, col1, col2, col3, col4, col5, col6, col7]

>>> df2
   col1  col2   col4   col7
0     1     2      4      7

>>> magic()
   col0  col1  col2  col3  col4  col5  col6  col7
0   NaN     1     2   NaN     4   NaN   NaN     7

Я пробовал с merge, но я получил дубликаты существующих столбцов. Я мог бы проверять столбец за столбцом, если есть допустимое значение, но я бы хотел (если оно существует) векторизованное решение, чтобы его можно было легко масштабировать (сейчас у меня есть только одна строка данных в каждом процессе, но это может быть подробнее).

Есть идеи, как этого добиться оптимизированным способом?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы можете использовать df.append:

>>> df1.append(df2, sort=True)
  col0 col1 col2 col3 col4 col5 col6 col7
0  NaN    1    2  NaN    4  NaN  NaN    7
1 голос
/ 25 февраля 2020

Использовать DataFrame.reindex по столбцам с первого DataFrame:

magic = df2.reindex(df1.columns,axis=1)
print (magic)
   col0  col1  col2  col3  col4  col5  col6  col7
0   NaN     1     2   NaN     4   NaN   NaN     7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...