Как добавить столбец в фрейм данных? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующий код:

db_fields = ("id", "email", "status", "source")
df = DataFrame(results)
for col in db_fields:
    if col not in df.columns:
          COLUMN IS MISSING - COMMAND TO ADD COLUMN

Если, например, отсутствует столбец status, его необходимо добавить в кадр данных, не указав в качестве значения ничего, поэтому при экспорте df в csv У меня всегда будет одна и та же схема полей.

Я знаю, что для удаления столбца мне нужно сделать:

df = df.drop(col, 1)

Но я не знаю, как лучше всего добавить столбец с пустым значением.

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вы можете создать массив несуществующих столбцов и создать новый с помощью assign и словаря:

df = pd.DataFrame({'id': ['a1','a2', 'b1'],
                  'a': ['a1','a2', 'b1'],
                  'source': ['a1','a2', 'b1']})
print (df)
   id   a source
0  a1  a1     a1
1  a2  a2     a2
2  b1  b1     b1

db_fields = ("id", "email", "status", "source")

#get missing columns
diff = np.setdiff1d(np.array(db_fields), df.columns)
print (diff)
['email' 'status']

#get original columns not existed in db_fields
diff1 = np.setdiff1d(df.columns, np.array(db_fields)).tolist()
print (diff1)
['a']

#add missing columns with change order
d = dict.fromkeys(diff, np.nan)
df = df.assign(**d)[diff1 + list(db_fields)]
print (df)
    a  id  email  status source
0  a1  a1    NaN     NaN     a1
1  a2  a2    NaN     NaN     a2
2  b1  b1    NaN     NaN     b1

#if necessary first db_fields
df = df.assign(**d)[list(db_fields) + diff1]
print (df)
   id  email  status source   a
0  a1    NaN     NaN     a1  a1
1  a2    NaN     NaN     a2  a2
2  b1    NaN     NaN     b1  b1
0 голосов
/ 26 ноября 2018

Вот и все, просто и просто, всего за одна строка :

import numpy as np
db_fields = ("id", "email", "status", "source")
df = DataFrame(results)
for col in db_fields:
    if col not in df.columns:
        # Add the column
        df[col] = np.nan

BTW: Вы также можете удалить столбец, используя df.drop(inplace=True).

0 голосов
/ 26 ноября 2018

Этот метод добавит столбец состояния со значениями NULL:

import numpy as np
df['status'] = np.nan

В качестве альтернативы:

df['status'] = None

Итак:

db_fields = ("id", "email", "status", "source")
for col in db_fields:
    if col not in df.columns:
        df[col] = None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...