web-dev-qa-db-fra.com

Comment changer une seule valeur d'index dans un cadre de données pandas?

energy.loc['Republic of Korea']

Je souhaite changer la valeur de l'indice de 'République de Corée' à 'Corée du Sud' . Mais le cadre de données est trop volumineux et il n'est pas possible de changer toutes les valeurs d'indice. Comment puis-je changer uniquement cette valeur unique?

14
user517696

Vous voulez faire quelque chose comme ça:

as_list = df.index.tolist()
idx = as_list.index('Republic of Korea')
as_list[idx] = 'South Korea'
df.index = as_list

En gros, vous obtenez l'index sous forme de liste, modifiez cet élément et remplacez l'index existant.

36
Batman

La solution de @ EdChum semble bonne . En voici une qui utilise renommer, qui remplacerait toutes ces valeurs dans l'index.

energy.rename(index={'Republic of Korea':'South Korea'},inplace=True)

Voici un exemple

>>> example = pd.DataFrame({'key1' : ['a','a','a','b','a','b'],
           'data1' : [1,2,2,3,nan,4],
           'data2' : list('abcdef')})
>>> example.set_index('key1',inplace=True)
>>> example
      data1 data2
key1             
a       1.0     a
a       2.0     b
a       2.0     c
b       3.0     d
a       NaN     e
b       4.0     f

>>> example.rename(index={'a':'c'}) # can also use inplace=True
      data1 data2
key1             
c       1.0     a
c       2.0     b
c       2.0     c
b       3.0     d
c       NaN     e
b       4.0     f
12
ErnestScribbler

Voici un autre bon, en utilisant replace sur la colonne.

df.reset_index(inplace=True)
df.drop('index', axis = 1, inplace=True)
df["Country"].replace("Republic of Korea", value="South Korea", inplace=True)
df.set_index("Country", inplace=True)
7
Andrea C

Si vous avez MultiIndex DataFrame, procédez comme suit:

# input DataFrame
import pandas as pd
t = pd.DataFrame(data={'i1':[0,0,0,0,1,1,1,1,2,2,2,2],
                       'i2':[0,1,2,3,0,1,2,3,0,1,2,3],
                       'x':[1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.]})
t.set_index(['i1','i2'], inplace=True)
t.sort_index(inplace=True)

# changes index level 'i1' values 0 to -1
t.rename(index={0:-1}, level='i1', inplace=True)
2
S.V

Voici une autre idée basée sur set_value

df = df.reset_index()
df.drop('index', axis = 1, inplace=True)
index = df.index[df["Country"] == "Republic of Korea"]
df.set_value(index, "Country", "South Korea")
df = df.set_index("Country")
df["Country"] = df.index
1
Andrea C