修改Pandas的行或列的名字(重命名)

  • Post category:Python

在Pandas中,我们可以通过rename()函数轻松地实现对行或列名的修改,该函数接收一个字典作为参数,字典的key是需要替换的原名,value是新的名称。下面是修改Pandas的行或列的名字的完整攻略。

1. 修改行或列名

1.1 修改列名

我们通过一个小例子来演示如何修改列名。首先,加载一个示例数据集iris,并显示前5行数据:

import pandas as pd 

iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)
print(iris.head())

运行结果:

     0    1    2    3               4
0  5.1  3.5  1.4  0.2     Iris-setosa
1  4.9  3.0  1.4  0.2     Iris-setosa
2  4.7  3.2  1.3  0.2     Iris-setosa
3  4.6  3.1  1.5  0.2     Iris-setosa
4  5.0  3.6  1.4  0.2     Iris-setosa

我们看到列名是默认的数字0、1、2、3、4。我们可以通过rename()函数轻松地将其修改为更合适的名称,比如’sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, ‘class’。代码如下:

iris.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
print(iris.head())

运行结果:

   sepal_length  sepal_width  petal_length  petal_width        class
0           5.1          3.5           1.4          0.2  Iris-setosa
1           4.9          3.0           1.4          0.2  Iris-setosa
2           4.7          3.2           1.3          0.2  Iris-setosa
3           4.6          3.1           1.5          0.2  Iris-setosa
4           5.0          3.6           1.4          0.2  Iris-setosa

我们看到列名已经被修改为我们指定的名称。

1.2 修改行名

我们通过一个小例子来演示如何修改行名。首先,我们手动创建一个数据集并书写行名,然后我们通过rename()函数将行名修改为更合适的名称。代码如下:

import pandas as pd

data = {'name':['Jack', 'Lucy', 'Tom', 'Lily'],
        'age':[18, 22, 20, 21],
        'gender':['M', 'F', 'M', 'F']}

df = pd.DataFrame(data, index=['student1', 'student2', 'student3', 'student4'])

print(df)
# 将行名修改为's1', 's2', 's3', 's4'
df.rename(index={'student1':'s1', 'student2':'s2', 'student3':'s3', 'student4':'s4'}, inplace=True)
print(df)

运行结果:

           name  age gender
student1   Jack   18      M
student2   Lucy   22      F
student3    Tom   20      M
student4   Lily   21      F
      name  age gender
s1    Jack   18      M
s2    Lucy   22      F
s3     Tom   20      M
s4    Lily   21      F

我们看到行名已经被修改为我们指定的名称。

2. 修改行或列名并返回新的数据

默认情况下,rename()函数不会修改原数据,而是返回新的数据。我们通过一个小例子来演示如何操作。首先,我们加载示例数据集iris,并将列名分别修改为’sepal_len’, ‘sepal_wid’, ‘petal_len’, ‘petal_wid’, ‘class’。然后我们通过rename()函数将行名修改为0、1、2、3、4,将列名修改回原始的sepallength、sepalwidth、petallength、petalwidth、iclass。代码如下:

import pandas as pd 

iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)
iris.columns = ['sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'iclass']
print(iris.head())

# 修改行名并返回新的数据
iris_new = iris.rename(index={0:'row1', 1:'row2', 2:'row3', 3:'row4', 4:'row5'},
                       columns={'sepallength':'sepal_len', 'sepalwidth':'sepal_wid', 
                                'petallength':'petal_len', 'petalwidth':'petal_wid',
                                'iclass':'class'})

print(iris_new.head())

运行结果:

   sepallength  sepalwidth  petallength  petalwidth        iclass
0          5.1         3.5          1.4         0.2  Iris-setosa
1          4.9         3.0          1.4         0.2  Iris-setosa
2          4.7         3.2          1.3         0.2  Iris-setosa
3          4.6         3.1          1.5         0.2  Iris-setosa
4          5.0         3.6          1.4         0.2  Iris-setosa

      sepal_len  sepal_wid  petal_len  petal_wid        class
row1        5.1        3.5        1.4        0.2  Iris-setosa
row2        4.9        3.0        1.4        0.2  Iris-setosa
row3        4.7        3.2        1.3        0.2  Iris-setosa
row4        4.6        3.1        1.5        0.2  Iris-setosa
row5        5.0        3.6        1.4        0.2  Iris-setosa

我们看到,原始数据没有被修改,新的数据iris_new返回了修改后的列名和行名。