如何更改pandas数据帧中的单个索引值?

时间:2016-11-04 16:50:05

标签: python pandas data-analysis

energy.loc['Republic of Korea']

我想将指数的价值从“韩国”改为“韩国”。 但是数据框太大,无法更改每个索引值。我如何仅更改此单个值?

7 个答案:

答案 0 :(得分:43)

你想做这样的事情:

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

基本上,您将索引作为列表,更改一个元素,并替换现有索引。

答案 1 :(得分:16)

@ EdChum的解决方案看起来不错。 这是使用重命名的方法,它将替换索引中的所有这些值。

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

这是一个例子

>>> 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

答案 2 :(得分:7)

这是另一个好的,在列上使用replace

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)

答案 3 :(得分:2)

这是基于<target name="junit" depends="compile"> <junit printsummary="yes" haltonfailure="no"> <classpath> <path refid="sample-classpath" /> </classpath> <formatter type="plain" usefile="false" /> <batchtest todir="${junit.report.dir}"> <fileset dir="${build.classes.dir}"> <include name="**/*Test.class" /> </fileset> </batchtest> </junit> </target>

的另一个想法
set_value

答案 4 :(得分:2)

如果您具有MultiIndex DataFrame,请执行以下操作:

# 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)

答案 5 :(得分:2)

尝试一下

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

答案 6 :(得分:0)

这似乎也可行:

energy.index.values[energy.index.tolist().index('Republic of Korea')] = 'South Korea'

不知道是建议还是不建议这样做。