Meer
Stel waarde in voor bepaalde cel in pandas DataFrame met behulp van index
Ik'heb een Pandas DataFrame gemaakt
df = DataFrame(index=['A','B','C'], columns=['x','y'])
en kreeg dit
x y A NaN NaN B NaN NaN C NaN NaN
Dan wil ik waarde toekennen aan bepaalde cel, bijvoorbeeld voor rij 'C' en kolom 'x'. Ik'heb verwacht een dergelijk resultaat te krijgen:
x y A NaN NaN B NaN NaN C 10 NaN
met deze code:
df.xs('C')['x'] = 10
maar inhoud van df
is'niet veranderd. Het is weer alleen NaN
in DataFrame.
Iemand suggesties?
391
3
Het antwoord van RukTech's,
df.set_value('C', 'x', 10)
, is veel en veel sneller dan de opties die ik'hieronder heb voorgesteld. Het is echter slated for deprecation.Voortaan is de aanbevolen methode
.iat/.at
.Waarom
df.xs('C')['x']=10
niet werkt:df.xs('C')
geeft standaard een nieuw dataframe met een kopie van de gegevens, duswijzigt alleen dit nieuwe dataframe.
df['x']
geeft een weergave van hetdf
dataframe, duswijzigt
df
zelf.Waarschuwing: Het is soms moeilijk te voorspellen of een bewerking een kopie of een view retourneert. Om deze reden raden de docs aan om opdrachten met "chained indexing" te vermijden.
Dus het aanbevolen alternatief is
die
df
wel wijzigt.Update: De
.set_value
methode gaat deprecated worden..iat/.at
zijn goede vervangers, helaas biedt pandas weinig documentatieDe snelste manier om dit te doen is met behulp van set_value. Deze methode is ~100 keer sneller dan de
.ix
methode. Bijvoorbeeld:df.set_value('C', 'x', 10)
De aanbevolen manier (volgens de beheerders) om een waarde in te stellen is:
Het gebruik van 'chained indexing' (
df['x']['C']
) kan tot problemen leiden.Zie: