Несколько столбцов вставки, если они не существуют pandas - PullRequest
1 голос
/ 18 июня 2020

У меня есть следующий df

list_columns = ['A', 'B', 'C']
list_data = [
    [1, '2', 3],
    [4, '4', 5],
    [1, '2', 3],
    [4, '4', 6]
    ]
df = pd.DataFrame(columns=list_columns, data=list_data)

Я хочу проверить, существует ли несколько столбцов, и если не создавать их.

Пример: Если B, C, D не существуют, создайте их (для приведенного выше df он создаст только столбец D) Я знаю, как это сделать с одним столбцом:

if 'D' not in df:
    df['D']=0

Есть ли способ проверить, существуют ли все мои столбцы, а если нет, создать тот, который отсутствует? И не делать if для каждого столбца

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Здесь l oop необязательно - используйте DataFrame.reindex с Index.union:

cols = ['B','C','D']

df = df.reindex(df.columns.union(cols, sort=False), axis=1, fill_value=0)
print (df)
   A  B  C  D
0  1  2  3  0
1  4  4  5  0
2  1  2  3  0
3  4  4  6  0
0 голосов
/ 18 июня 2020

Чтобы добавить, вы можете распаковать set diff между столбцами и списком с помощью распаковки assign и **.

import numpy as np
cols = ['B','C','D','E']

df.assign(**{col : 0 for col in np.setdiff1d(cols,df.columns.values)})

   A  B  C  D  E
0  1  2  3  0  0
1  4  4  5  0  0
2  1  2  3  0  0
3  4  4  6  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...