Как добавить пустой столбец в dataframe?

Какой самый простой способ добавить пустой столбец в объект pandas DataFrame? Лучшее, что я наткнулся, это что-то вроде

df['foo'] = df.apply(lambda _: '', axis=1)

Существует ли менее извращенный метод?

Ответ 1

Если я правильно понимаю, назначение должно заполнить:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

Ответ 2

Чтобы добавить ответ DSM и опираться на этот связанный вопрос, я бы разделил подход на два случая:

  • Добавление одного столбца: просто назначьте пустые значения новым столбцам, например, df['C'] = np.nan

  • Добавление нескольких столбцов: Я хотел бы предложить, используя .reindex(columns=[...]) метод панд, чтобы добавить новые столбцы индекса столбца dataframe. Это также работает для добавления нескольких новых строк.

Вот пример добавления нескольких столбцов:

mydf = mydf.reindex( mydf.columns.tolist() + ['newcol1','newcol2'])  # version >= 0.20.0

или же

mydf = mydf.reindex( columns = mydf.columns.tolist() + ['newcol1','newcol2'])  # version < 0.20.0

Вы также всегда можете объединить новый (пустой) фрейм данных с существующим фреймом данных, но это не кажется мне питонным :)

Ответ 3

еще более простое решение:

df = df.reindex(columns = header_list)                

где "header_list" - это список заголовков, которые вы хотите отобразить.

любой заголовок, включенный в список, который не найден уже в фрейме данных, будет добавлен с пустыми ячейками ниже.

поэтому, если

header_list = ['a','b','c', 'd']

то c и d будут добавлены в виде столбцов с пустыми ячейками

Ответ 4

Начиная с v0.16.0, DF.assign() можно использовать для назначения новых столбцов (один/несколько) в DF. Эти столбцы вставляются в алфавитном порядке в конце DF.

Это становится выгодным по сравнению с простым назначением в случаях, когда вы хотите выполнить последовательность цепочечных операций непосредственно на возвращаемом фрейме данных.

Рассмотрим тот же образец DF, продемонстрированный с помощью @DSM:

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
   A  B
0  1  2
1  2  3
2  3  4

df.assign(C="",D=np.nan)
Out[21]:
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

Обратите внимание, что это возвращает копию со всеми предыдущими столбцами вместе с вновь созданными. Inorder для исходного DF, который должен быть соответствующим образом изменен, используйте его как: df = df.assign(...), поскольку он не поддерживает в настоящее время операцию inplace.

Ответ 5

@emunsing answer действительно классно добавлять несколько столбцов, но я не мог заставить его работать для меня в python 2.7. Вместо этого я нашел, что это работает:

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])

Ответ 6

если вы хотите добавить имя столбца из списка

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan