Ответы:
Если я правильно понимаю, назначение должно заполнить:
>>> 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
df
пусто, вы можете использовать df['new'] = pd.Series()
(см. Мой ответ ниже)
Чтобы добавить ответ DSM и опираться на этот связанный вопрос , я бы разделил подход на два случая:
Добавление одного столбца: просто назначьте пустые значения новым столбцам, например df['C'] = np.nan
Добавление нескольких столбцов. Я бы предложил использовать .reindex(columns=[...])
метод панд, чтобы добавить новые столбцы в индекс столбцов данных. Это также работает для добавления нескольких новых строк с .reindex(rows=[...])
. Обратите внимание, что более новые версии Pandas (v> 0,20) позволяют вам указывать axis
ключевое слово, а не явно назначать columns
или rows
.
Вот пример добавления нескольких столбцов:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
или
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Вы также всегда можете объединить новый (пустой) фрейм данных с существующим фреймом данных, но это не выглядит для меня питонным :)
version >= 0.20.0
удаления DataFrame и добавления новых столбцов в виде строк. Пример version < 0.20.0
отлично работает на Pandas Version0.24.1
, axis=1
в version = 0.25
. Я попытался изменить ваш ответ, включив в него обновленную версию, но я был отклонен @kenlukas и @il_raffa. Я надеюсь, что все изо всех сил пытаются понять, почему ваш ответ не работает для них - как я - по крайней мере сталкивался с этим комментарием.
еще более простое решение:
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
Обратите внимание, что это возвращает копию со всеми предыдущими столбцами вместе с вновь созданными. Для того, чтобы оригинал DF
был изменен соответствующим образом, используйте его следующим образом: df = df.assign(...)
поскольку он не поддерживает inplace
операции в настоящее время.
если вы хотите добавить имя столбца из списка
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
@ emunsing - х ответ действительно охладиться для добавления нескольких столбцов, но я не мог заставить его работать на меня в Python 2.7. Вместо этого я нашел это работает:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Приведенный ниже код отвечает на вопрос «Как мне добавить n пустых столбцов в мой существующий фрейм данных». В интересах сохранения решений подобных проблем в одном месте, я добавляю их сюда.
Подход 1 (создать 64 дополнительных столбца с именами столбцов от 1 до 64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Подход 2 (создать 64 дополнительных столбца с именами столбцов от 1 до 64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Ты можешь сделать
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
Можно использовать df.insert(index_to_insert_at, column_header, init_value)
для вставки нового столбца по определенному индексу.
cost_tbl.insert(1, "col_name", "")
Вышеприведенный оператор вставит пустой столбец после первого столбца.
N/A
?