Nastavitev vrednosti za določeno celico v pandas DataFrame z uporabo indeksa
Ustvaril sem podatkovni okvir Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
in dobil sem tole
x y A NaN NaN B NaN NaN NaN C NaN NaN NaN
Nato želim pripisati vrednost določeni celici, na primer vrstici 'C' in stolpcu 'x'. Pričakoval sem, da bom dobil takšen rezultat:
x y A NaN NaN B NaN NaN NaN C 10 NaN
s to kodo:
df.xs('C')['x'] = 10
vendar se vsebina df
ni spremenila. V DataFrame je spet samo NaN
.
Kakršen koli predlog?
391
3
RukTechov odgovor,
df.set_value('C', 'x', 10)
, je veliko hitrejši od možnosti, ki sem jih predlagal spodaj. Vendar pa je bila izločena iz uporabe.V prihodnje je priporočena metoda
.iat/.at
.Kaj
df.xs('C')['x']=10
ne deluje:df.xs('C')
privzeto vrne nov podatkovni okvir s kopijo podatkov, zatospremeni samo ta novi podatkovni okvir.
df['x']
vrne pogled na podatkovni okvirdf
, torejspreminja samo
df
.Pozorilo: Včasih je težko predvideti, ali operacija vrne kopijo ali pogled. Zato dokumenti priporočajo, da se izogibate nalogam z "verižnim indeksiranjem".
Zato je priporočena alternativa
ki spreminja
df
.Posodobitev: Metoda
.set_value
bo zastarela..iat/.at
sta dobri zamenjavi, na žalost pa pandas ponuja malo dokumentacijeNajhitrejši način za to je uporaba set_value. Ta metoda je ~100-krat hitrejša od metode
.ix
. Na primer:df.set_value('C', 'x', 10)
Priporočeni način (po mnenju vzdrževalcev) za nastavitev vrednosti je:
Uporaba 'verižnega indeksiranja' (
df['x']['C']
) lahko povzroči težave.Glej: