Задаване на стойност за конкретна клетка в pandas DataFrame чрез използване на индекс
Създадох Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
и получих това
x y A NaN NaN B NaN NaN C NaN NaN
След това искам да присвоя стойност на определена клетка, например за ред 'C' и колона 'x'. Очаквах да получа такъв резултат:
x y A NaN NaN B NaN NaN C 10 NaN
с този код:
df.xs('C')['x'] = 10
но съдържанието на df
не се е променило. В DataFrame отново има само NaN
.
Някакви предложения?
391
3
RukTech's answer,
df.set_value('C', 'x', 10)
, е далеч по-бърз от вариантите, които съм предложил по-долу. Въпреки това, тя е определена за изчерпване.Занапред препоръчителният метод е
.iat/.at
.Защо
df.xs('C')['x']=10
не работи:df.xs('C')
по подразбиране връща нова рамка от данни с копие на данните, така чемодифицира само тази нова рамка от данни.
df['x']
връща изглед на рамката от данниdf
, така чемодифицира самия
df
.Предупреждение: Понякога е трудно да се предвиди дали дадена операция връща копие или изглед. По тази причина документите препоръчват да се избягват присвоявания с "верижно индексиране".
Така че препоръчителната алтернатива е
която изменя
df
.Актуализация: Методът
.set_value
ще бъде изчерпан..iat/.at
са добри заместители, но за съжаление pandas предоставя малко документацияНай-бързият начин да направите това е като използвате set_value. Този метод е ~100 пъти по-бърз от метода
.ix
. Например:df.set_value('C', 'x', 10)
Препоръчителният начин (според поддържащите) за задаване на стойност е:
Използването на 'верижно индексиране' (
df['x']['C']
) може да доведе до проблеми.Вижте: