Viac na
Pridanie nového stĺpca do existujúceho DataFrame v programe Python pandas
Mám nasledujúci indexovaný DataFrame s pomenovanými stĺpcami a riadkami, ktoré nie sú súvislými číslami:
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
Chcel by som pridať nový stĺpec, 'e'
, do existujúceho DataFrame a nechcem nič meniť v DataFrame (t.j. nový stĺpec má vždy rovnakú dĺžku ako DataFrame).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
Skúšal som rôzne verzie join
, append
, merge
, ale nedostal som požadovaný výsledok, nanajvýš chyby. Ako môžem pridať stĺpec e
do uvedeného príkladu?
882
3
Na vytvorenie série použite pôvodné indexy df1:
Úprava 2015 Niektorí hlásili, že pri tomto kóde dostanú upozornenie
SettingWithCopyWarning
.Kód však stále funguje perfektne s aktuálnou verziou pandas 0.16.1.
Výstraha
SettingWithCopyWarning
má za cieľ informovať o možnom neplatnom priradení na kópiu Dataframe. Nemusí nevyhnutne povedať, že ste to urobili zle (môže vyvolať falošne pozitívne výsledky), ale od verzie 0.13.0 vám dáva vedieť, že na rovnaký účel existujú vhodnejšie metódy. Ak potom dostanete varovanie, jednoducho sa riaďte jeho radami: namiesto toho skúste použiť .loc[row_index,col_indexer] = valueV skutočnosti je to v súčasnosti efektívnejšia metóda, ako je popísané v dokumentoch pandas.
Úprava 2017
Ako je uvedené v komentároch a od @Alexander, v súčasnosti najlepšou metódou na pridanie hodnôt série ako nového stĺpca DataFrame by mohlo byť použitie
assign
:Toto je jednoduchý spôsob pridania nového stĺpca:
df['e'] = e
Najefektívnejšie bude, ak to urobíte priamo cez NumPy:
Všimnite si, že môj pôvodný (veľmi starý) návrh bol použiť
map
(čo je oveľa pomalšie):