Indstil værdien for en bestemt celle i pandas DataFrame ved hjælp af indeks
Jeg har oprettet et Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
og fik dette
x y A NaN NaN NaN B NaN NaN NaN C NaN NaN NaN
Derefter vil jeg tildele værdi til en bestemt celle, f.eks. for række 'C' og kolonne 'x'. Jeg'har forventet at få et sådant resultat:
x y A NaN NaN NaN B NaN NaN NaN C 10 NaN
med denne kode:
df.xs('C')['x'] = 10
men indholdet af df
er ikke ændret. Det er igen kun NaN
s i DataFrame.
Nogen forslag?
391
3
RukTech's svar,
df.set_value('C', 'x', 10)
, er langt hurtigere end de muligheder, jeg har foreslået nedenfor. Den er dog blevet [slated for deprecation] (https://github.com/pandas-dev/pandas/issues/15269).Fremover er den [anbefalede metode
.iat/.at
] (https://github.com/pandas-dev/pandas/issues/15269#issuecomment-276382712).Hvorfor
df.xs('C')['x']=10
ikke virker:df.xs('C')
returnerer som standard et nyt dataframe med en kopi af dataene, såkun ændrer dette nye dataframe.
df['x']
returnerer en visning afdf
datarammen, såændrer
df
selv.Varsling: Det er nogle gange svært at forudsige, om en operation returnerer en kopi eller en visning. Af denne grund anbefaler docs at undgå opgaver med "chained indexing"1.
Så det anbefalede alternativ er
som gør ændring af
df
.Opdatering: Metoden
.set_value
vil blive forældet..iat/.at
er gode erstatninger, desværre giver pandas kun lidt dokumentationDen hurtigste måde at gøre dette på er at bruge set_value. Denne metode er ~100 gange hurtigere end
.ix
-metoden. For eksempel:fdf.set_value('C', 'x', 10)`
Den anbefalede måde (ifølge vedligeholderne) at indstille en værdi på er:
Brug af 'chained indexing'; (
df['x']['C']
) kan føre til problemer.Se: