Відповіді:
Якщо я правильно розумію, завдання потрібно заповнити:
>>> 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
відмінної роботи у версії Pandas0.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
?