Добавяне на нова колона към съществуваща DataFrame в Python pandas
Имам следната индексирана DataFrame с именувани колони и редове, които не са непрекъснати числа:
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
Бих искал да добавя нова колона, 'e'
, към съществуващата рамка от данни и не искам да променям нищо в рамката от данни (т.е. новата колона винаги има същата дължина като рамката от данни).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
Опитах различни версии на join
, append
, merge
, но не получих желания резултат, а най-много само грешки. Как мога да добавя колона e
към горния пример?
882
3
Използвайте оригиналните индекси df1, за да създадете сериите:
Редактиране 2015 Някои съобщават за получаване на предупреждението
SettingWithCopyWarning
с този код.Въпреки това кодът продължава да работи перфектно с текущата версия на pandas 0.16.1.
Предупреждението
SettingWithCopyWarning
има за цел да информира за евентуално невалидно присвояване върху копие на Dataframe. Не е задължително да казва, че сте го направили погрешно (може да предизвика фалшиви положителни резултати), но от версия 0.13.0 ви уведомява, че има по-адекватни методи за същата цел. След това, ако получите предупреждението, просто следвайте съветите му: Вместо това опитайте да използвате .loc[row_index,col_indexer] = valueВсъщност това понастоящем е по-ефикасният метод, както е описано в документите на pandas
Редактиране 2017
Както е посочено в коментарите и от @Alexander, понастоящем най-добрият метод за добавяне на стойностите на серия като нова колона на DataFrame може да бъде използването на
assign
:Това е най-простият начин за добавяне на нова колона:
df['e'] = e
Извършването на това директно чрез NumPy ще бъде най-ефективно:
Забележете, че първоначалното ми (много старо) предложение беше да се използва
map
(което е много по-бавно):