用条件参数替换python中的DataFrame索引值

时间:2017-11-21 06:03:19

标签: python pandas dataframe

抱歉,NOOB总在这里! 尝试替换DataFrame中索引列中的某些字符串值。该索引是国名,需要替换像英国和北爱尔兰这样的国家/地区。与英国'。

DataFrame看起来像这样:

data = ['12','13','14', '15']
df = pd.DataFrame(data, index = ['Republic of Korea','United States of America20', 'United Kingdom of Great Britain and Northern Ireland19','China, Hong Kong Special Administrative Region'],columns=['Country'])

我试过了:

d={"Republic of Korea": "South Korea",
   "United States of America20": "United States",
    "United Kingdom of Great Britain and Northern Ireland19": "United Kingdom",
    "China, Hong Kong Special Administrative Region": "Hong Kong"}  
df.index = df.index.str.replace(d)

我确信它非常简单,并且已经进行了广泛的搜索以获得一种方法。只是得到一条错误消息,表明替换缺少位置参数。

2 个答案:

答案 0 :(得分:1)

您可以初始化一个系列并致电pd.Series.replace

df   
                                                   Country
Republic of Korea                                       12
United States of America20                              13
United Kingdom of Great Britain and Northern Ir...      14
China, Hong Kong Special Administrative Region          15


df.index = pd.Series(df.index).replace(d)
df

               Country
South Korea         12
United States       13
United Kingdom      14
Hong Kong           15

<强>计时

df = pd.concat([df] * 100000)

%timeit df.rename(d)
10 loops, best of 3: 116 ms per loop

%timeit pd.Series(df.index).replace(d)
10 loops, best of 3: 96.7 ms per loop

我可以使用df.index.values

来提高速度
%timeit pd.Series(df.index.values).replace(d)
10 loops, best of 3: 88 ms per loop

您的机器上的时间会有所不同,因此在决定采用何种方法之前,请务必先进行自己的测试。

答案 1 :(得分:0)

replaceindex中的columns值的pandas中使用了函数rename

df = df.rename(d)
print (df)
               Country
South Korea         12
United States       13
United Kingdom      14
Hong Kong           15

对我而言,时间几乎相同:

df = pd.concat([df] * 100000)

In [11]: %timeit df.rename(d)
10 loops, best of 3: 75.7 ms per loop

In [12]: %timeit pd.Series(df.index).replace(d)
10 loops, best of 3: 71.8 ms per loop

In [13]: %timeit pd.Series(df.index.values).replace(d)
10 loops, best of 3: 75.3 ms per loop