在Pandas DataFrame中重命名列的7个技巧和窍门

2,003 阅读5分钟

如何在Pandas中重命名列?

在本教程中,我们将向你展示如何在Pandas数据框架中重命名列的各种方法。具体来说,我们将介绍列属性、*set_axis()rename()*函数这三种主要方法,并举例说明Pandas重命名列的方法。

创建一个潘达斯数据框架样本

让我们在pandas中创建一个样本数据框架,在随后的所有例子中都会用到,以改变Pandas中的列名。

In[0]:

import pandas as pd;

# create a dataframe
data = {'Employee_No': ['E0001', 'E0002', 'E0003', 'E0004'],
'Employee_Name': ['John', 'Ron', 'Sam', 'Alice'],
'Department':['Sales','Sales','Finance','Finance']}
df = pd.DataFrame(data)
df

Out[0]:

雇员编号雇员姓名部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

用列属性改变Pandas中的列名

例子1

在Pandas中改变列名的第一个方法是使用数据框的列属性。如下面的例子所示,我们已经将修改后的列名列表分配给df.column属性。

这里需要注意的是,即使我们不想改变所有列的名称,也必须传递所有列的名称。否则,它将抛出一个错误。

在下面的例子中,我们想把Employee_Id改成Emp_Id,把Emloyee_Name改成Emp_Name。但是,我们仍然传递了Department列,尽管它没有改变。

In [1]:

df.columns = ["Emp_Id", "Emp_Name", "Department"]
df

输出[1]:

Emp_Id雇员名称部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

用set_axis()改变Pandas中的列名

例2

在这个例子中,我们将使用Pandas的set_axis属性来修改列名。就像之前的方法一样,在这里我们也必须传递整个列的列表,尽管我们只想改变前两列。

axis = 1告诉pandas这些改变将被应用于这些列,同时inplace = True也被使用,这样改变就会在当前的数据框架df中持续存在。

In [2]:

df.set_axis(["Emp_Id", "Emp_Name", "Department"], axis=1, inplace = True)
df

Out [2]:

Emp_Id雇员姓名部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

用rename()重命名Pandas中的列名

在前面关于列和set_axis属性的例子中,我们不得不传递整个列的列表,尽管我们有要求只改变其中的几个。当列的总数较少时,这是好的,但当有数百个列时,为了改变其中的几个列而传递所有的列名是不现实的。

这就是rename()的用武之地,它可以让你在pandas中只处理需要重命名的列。而且它还支持使用lambda函数来让你以编程方式修改列。 让我们通过各种例子来理解这一点。

例三

在这个例子中,我们将字典数据结构中现有的和新的列名的映射传递给 rename() 函数。需要注意的是,这里只传递了那些需要重命名的列。另外,轴=1告诉Pandas这个重命名是针对列的,inplace=True允许改变在数据框架中持续存在。

In [3]:

df.rename({'Employee_No':'Emp_Id', 'Employee_Name':'Emp_Name'}, axis=1, inplace = True)
df

Out [3]:

Emp_Id雇员姓名部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

例四

这是上述Pandas中列重命名例子的另一个变化。我们使用列参数来分配新旧列名的字典映射,而不是传递axis=1。

In [4]:

df.rename(columns= {'Employee_No':'Emp_Id', 'Employee_Name':'Emp_Name' }, inplace = True)
df

Out [4]:

Emp_IdEmp_Name部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

例5 - 在Pandas中把列名重命名为小写字母

用rename()函数将pandas数据框架的所有列重命名为小写字母是很容易的,如下例所示。这是不是很酷?

In [5]:

df.rename(columns= str.lower, inplace = True)
df

Out [5]:

employee_no员工姓名部门
0E0001约翰销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

例6 - 在Pandas中把列名改为大写字母

就像上面的例子一样,我们也可以用rename()函数将列名改为大写,如下所示。

In[6]:

df.rename(columns= str.upper, inplace = True)
df

输出[6]:

EMPLOYEE_NOEMPLOYEE_NAME部门
0E0001经理销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

例7--用Lambda函数重命名Pandas列名

如果你想以编程方式改变pandas数据框架的列名,可以通过使用lambda函数rename()来完成。这确实增加了rename()函数的灵活性和力量。

在我们的例子中,我们希望在每一列的名字前面添加前缀'Cmp_'。与其手动操作,不如用lambda函数来完成,如下图所示。

Lambda函数开启了全新的可能性,只需一行代码就可以按你的要求重命名列。

In[7]:

df.rename(columns=lambda x: 'Cmp_'+ x, inplace = True)
df

Out[7]:

Cmp_Employee_NoCmp_Employee_NameCmp_Department
0E0001销售部
1E0002罗恩销售人员
2E0003琛哥财务部
3E0004爱丽丝金融

参考资料 -pandas文档