Odpowiedzi:
Jeśli dobrze rozumiem, zadanie powinno wypełnić:
>>> 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
jest pusty, możesz użyć df['new'] = pd.Series()
(patrz moja odpowiedź poniżej)
Aby dodać do odpowiedzi DSM i bazując na tym powiązanym pytaniu , podzieliłem podejście na dwa przypadki:
Dodawanie pojedynczej kolumny: Po prostu przypisz puste wartości do nowych kolumn, np df['C'] = np.nan
Dodawanie wielu kolumn: Sugeruję użycie .reindex(columns=[...])
metody pand, aby dodać nowe kolumny do indeksu kolumn ramki danych. Działa to również w przypadku dodawania wielu nowych wierszy za pomocą .reindex(rows=[...])
. Zauważ, że nowsze wersje Pand (v> 0.20) pozwalają na określenie axis
słowa kluczowego zamiast jawnego przypisywania do columns
lub rows
.
Oto przykład dodawania wielu kolumn:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
lub
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Zawsze możesz też połączyć nową (pustą) ramkę danych z istniejącą ramką danych, ale nie wydaje mi się to pytoniczne :)
version >= 0.20.0
usunięcia DataFrame i dodanie nowych kolumn jako wierszy. Przykład version < 0.20.0
dobrze działa na wersji Pandas0.24.1
, axis=1
się version = 0.25
. Próbowałem zmodyfikować twoją odpowiedź, aby uwzględnić zaktualizowaną wersję, ale zostałem odrzucony przez @kenlukas i @il_raffa. Mam nadzieję, że wszyscy starają się zrozumieć, dlaczego twoja odpowiedź nie działa na nich - tak jak ja - przynajmniej napotyka ten komentarz.
jeszcze prostszym rozwiązaniem jest:
df = df.reindex(columns = header_list)
gdzie „lista_nagłówków” to lista nagłówków, które chcesz wyświetlić.
każdy nagłówek zawarty na liście, który nie znajduje się już w ramce danych, zostanie dodany z pustymi komórkami poniżej.
więc jeśli
header_list = ['a','b','c', 'd']
następnie c i d zostaną dodane jako kolumny z pustymi komórkami
Zaczynając od v0.16.0
, DF.assign()
można użyć do przypisania nowych kolumn ( pojedynczych / wielokrotnych ) do DF
. Te kolumny są wstawiane w kolejności alfabetycznej na końcu DF
.
Staje się to korzystne w porównaniu z prostym przypisywaniem w przypadkach, w których chcesz wykonać szereg powiązanych operacji bezpośrednio na zwróconej ramce danych.
Rozważ tę samą DF
próbkę zademonstrowaną przez @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
Zauważ, że to zwraca kopię wszystkich poprzednich kolumn wraz z nowo utworzonymi. Aby DF
odpowiednio zmodyfikować oryginał, użyj go w następujący sposób: df = df.assign(...)
ponieważ nie obsługuje on inplace
obecnie operacji.
jeśli chcesz dodać nazwę kolumny z listy
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
Poniższy kod dotyczy pytania „Jak dodać n pustych kolumn do mojej istniejącej ramki danych”. Aby zachować rozwiązania podobnych problemów w jednym miejscu, dodam je tutaj.
Podejście 1 (aby utworzyć 64 dodatkowe kolumny o nazwach kolumn od 1 do 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
Podejście 2 (aby utworzyć 64 dodatkowe kolumny o nazwach kolumn od 1 do 64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Możesz to zrobić
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
Można użyć df.insert(index_to_insert_at, column_header, init_value)
do wstawienia nowej kolumny pod określonym indeksem.
cost_tbl.insert(1, "col_name", "")
Powyższa instrukcja wstawiłaby pustą kolumnę po pierwszej kolumnie.
N/A
?