Какой самый простой способ добавить пустой столбец в объект pandas DataFrame
? Лучшее, что я наткнулся, это что-то вроде
df['foo'] = df.apply(lambda _: '', axis=1)
Существует ли менее извращенный метод?
Какой самый простой способ добавить пустой столбец в объект pandas DataFrame
? Лучшее, что я наткнулся, это что-то вроде
df['foo'] = df.apply(lambda _: '', axis=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
Чтобы добавить ответ 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
Вы также всегда можете объединить новый (пустой) фрейм данных с существующим фреймом данных, но это не кажется мне питонным :)
еще более простое решение:
df = df.reindex(columns = header_list)
где "header_list" - это список заголовков, которые вы хотите отобразить.
любой заголовок, включенный в список, который не найден уже в фрейме данных, будет добавлен с пустыми ячейками ниже.
поэтому, если
header_list = ['a','b','c', 'd']
то c и d будут добавлены в виде столбцов с пустыми ячейками
Начиная с 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
.
@emunsing answer действительно классно добавлять несколько столбцов, но я не мог заставить его работать для меня в python 2.7. Вместо этого я нашел, что это работает:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
если вы хотите добавить имя столбца из списка
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan