2013-05-01 5 views
100

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

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

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

+0

ли вы на самом деле хотите столбец, содержащий пустые строки или, вернее, 'N/Ā'? – filmor

ответ

153

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

>>> 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 
+7

Не могли бы вы объяснить мне, что такое IIUC? – lmiguelvargasf

+8

@lmiguelvargasf это сокращение от «Если я правильно понимаю» – einonm

16

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

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

  • Добавление нескольких столбцов: Я хотел бы предложить, используя .reindex(columns=[...])method of pandas, чтобы добавить новые столбцы индекса столбца в 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 

Вы также всегда можете сцепить новый (пустой) dataframe к существующему dataframe, но это Безразлично» t для меня как пифонова :)

5

Начиная с 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 Операция в настоящее время.

+0

Что это за тип данных для C? Я пытаюсь добавить, перейдя по списку строк. Но он не использует его. – eleijonmarck

2

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

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

еще проще решение:

df = df.reindex(columns = header_list)     

где «header_list» список заголовков, которые должны отображаться.

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

так что если

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

затем с и d будут добавлены в виде столбцов с пустыми клетками

+0

Точнее, столбцы будут добавлены с помощью NaN. – broccoli2000

Смежные вопросы