Czy rzeczywiście chcesz kolumnę zawierającą puste ciągi, czy raczej N/A?
filmowiec
Odpowiedzi:
419
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 B012123234>>> df["C"]="">>> df["D"]= np.nan>>> df
A B C D012NaN123NaN234NaN
Ta odpowiedź właśnie stworzyła dla mnie nowe wiersze.
logicbloke
@logicbloke, czy możesz podać przykład, w którym to się dzieje?
craymichael
@craymichael Minęło trochę czasu, ale wydaje mi się, że miałem kolumny indeksowane liczbami bez nazw i nazwanych wierszy, a na końcu utworzyłem nowy wiersz.
logicbloke,
1
Jeśli dfjest pusty, możesz użyć df['new'] = pd.Series() (patrz moja odpowiedź poniżej)
Carsten
jak dodać wiele pustych kolumn?
M. Mariscal
46
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 axissłowa kluczowego zamiast jawnego przypisywania do columnslub rows.
Przykład version >= 0.20.0usunięcia DataFrame i dodanie nowych kolumn jako wierszy. Przykład version < 0.20.0dobrze działa na wersji Pandas0.24.1
Lalo
@ emunsing Szukając odpowiedzi na to pytanie, ostatecznie uznałem twoją odpowiedź za pomocną. Początkowo jednak, że jest ono nie działa na mnie jak Pandy wymaga , axis=1się 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.
Griff
@Griff - Zaktualizowałem moją odpowiedź, aby była bardziej dokładna i jednoznaczna na temat problemów ze zgodnością wersji. Dziękujemy za podkreślenie tego.
emuning
35
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ą DFpróbkę zademonstrowaną przez @DSM:
df = pd.DataFrame({"A":[1,2,3],"B":[2,3,4]})
dfOut[18]:
A B012123234
df.assign(C="",D=np.nan)Out[21]:
A B C D012NaN123NaN234NaN
Zauważ, że to zwraca kopię wszystkich poprzednich kolumn wraz z nowo utworzonymi. Aby DFodpowiednio zmodyfikować oryginał, użyj go w następujący sposób: df = df.assign(...)ponieważ nie obsługuje on inplaceobecnie operacji.
@ emunsing na odpowiedź jest naprawdę fajne do dodawania wielu kolumn, ale nie mogę zmusić go do pracy dla mnie w Pythonie 2.7. Zamiast tego znalazłem to działa:
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['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
N/A
?Odpowiedzi:
Jeśli dobrze rozumiem, zadanie powinno wypełnić:
źródło
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ślenieaxis
słowa kluczowego zamiast jawnego przypisywania docolumns
lubrows
.Oto przykład dodawania wielu kolumn:
lub
Zawsze możesz też połączyć nową (pustą) ramkę danych z istniejącą ramką danych, ale nie wydaje mi się to pytoniczne :)
źródło
version >= 0.20.0
usunięcia DataFrame i dodanie nowych kolumn jako wierszy. Przykładversion < 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:
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
następnie c i d zostaną dodane jako kolumny z pustymi komórkami
źródło
Zaczynając od
v0.16.0
,DF.assign()
można użyć do przypisania nowych kolumn ( pojedynczych / wielokrotnych ) doDF
. Te kolumny są wstawiane w kolejności alfabetycznej na końcuDF
.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: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 oninplace
obecnie operacji.źródło
Podoba mi się:
Jeśli masz pustą ramkę danych, to rozwiązanie zapewnia, że nie
NaN
zostanie dodany żaden nowy wiersz zawierający tylko .Jeśli
dtype
nie jest określony, nowsze wersje Pandas tworząDeprecationWarning
.źródło
jeśli chcesz dodać nazwę kolumny z listy
źródło
@ emunsing na odpowiedź jest naprawdę fajne do dodawania wielu kolumn, ale nie mogę zmusić go do pracy dla mnie w Pythonie 2.7. Zamiast tego znalazłem to działa:
źródło
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)
Podejście 2 (aby utworzyć 64 dodatkowe kolumny o nazwach kolumn od 1 do 64)
źródło
Możesz to zrobić
źródło
Można użyć
df.insert(index_to_insert_at, column_header, init_value)
do wstawienia nowej kolumny pod określonym indeksem.Powyższa instrukcja wstawiłaby pustą kolumnę po pierwszej kolumnie.
źródło