如何在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]:
| 雇员编号 | 雇员姓名 | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
用列属性改变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 | 雇员名称 | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
用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 | 雇员姓名 | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
用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 | 雇员姓名 | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
例四
这是上述Pandas中列重命名例子的另一个变化。我们使用列参数来分配新旧列名的字典映射,而不是传递axis=1。
In [4]:
df.rename(columns= {'Employee_No':'Emp_Id', 'Employee_Name':'Emp_Name' }, inplace = True)
df
Out [4]:
| Emp_Id | Emp_Name | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
例5 - 在Pandas中把列名重命名为小写字母
用rename()函数将pandas数据框架的所有列重命名为小写字母是很容易的,如下例所示。这是不是很酷?
In [5]:
df.rename(columns= str.lower, inplace = True)
df
Out [5]:
| employee_no | 员工姓名 | 部门 | |
|---|---|---|---|
| 0 | E0001 | 约翰 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
例6 - 在Pandas中把列名改为大写字母
就像上面的例子一样,我们也可以用rename()函数将列名改为大写,如下所示。
In[6]:
df.rename(columns= str.upper, inplace = True)
df
输出[6]:
| EMPLOYEE_NO | EMPLOYEE_NAME | 部门 | |
|---|---|---|---|
| 0 | E0001 | 经理 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
例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_No | Cmp_Employee_Name | Cmp_Department | |
|---|---|---|---|
| 0 | E0001 | 庄 | 销售部 |
| 1 | E0002 | 罗恩 | 销售人员 |
| 2 | E0003 | 琛哥 | 财务部 |
| 3 | E0004 | 爱丽丝 | 金融 |
参考资料 -pandas文档