Pandas 重命名列和索引

有时我们希望在 Pandas DataFrame 对象中重新命名列和索引。我们可以使用 pandas DataFrame 重命名() 函数来重新命名列和索引。

  • mapper:在列和索引上应用的词典或函数。 参数确定目标轴 - 列或索引 。 () ( )* index:必须是更改索引名称的词典或函数. () ( )* :必须是更改列名的词典或函数. (_ ( )* :可以是英寸或弦. 它与"mapper"参数一起被用来定义目标轴. 允许的值为 ("index","列")或数字 (0, 1). 默认值为"index". (_ ( )* ** 位置**:如果 True, DataFrame 将更改。 否则,返回一个新的DataFrame,当前DataFrame保持不变. 默认值为 (_) ( )* ** 级别**:可以是int或级别名称. 它被用到一个多索引上,只在指定的级别重命名标签.
  • ** errors**:可能的值是("ignore","author"),默认值是"ignore". 如果指定为 cause , 当像 dict 的mapperindex柱子 包含正在转换的索引中不存在的标签时, KeyError 会被提出 。 如果ignoore , 现有的密钥将被重新命名并忽略额外的密钥 。 (_) (英语)

关于 rename() 函数的一些重要点。

建议使用关键字参数来明确指定意图 2.我们可以使用此函数重命名单列或多个列,取决于字典中的值

让我们看看使用 Pandas rename() 函数的一些例子。

1. 潘达斯重命名列

 1import pandas as pd
 2
 3d1 = {'Name': ['Pankaj', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']}
 4
 5df = pd.DataFrame(d1)
 6
 7print('Source DataFrame:\n', df)
 8
 9# rename columns
10df1 = df.rename(columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'})
11print('Result DataFrame:\n', df1)

输出:

 1Source DataFrame:
 2      Name ID Role
 30 Pankaj 1 CEO
 41 Lisa 2 Editor
 52 David 3 Author
 6Result DataFrame:
 7   EmpName EmpID EmpRole
 80 Pankaj 1 CEO
 91 Lisa 2 Editor
102 David 3 Author

上面的 rename() 函数调用也可以用以下方式编写。

1df1 = df.rename(mapper={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'},
2                axis='columns')  # axis=1 corresponds to columns

很明显,使用关键字参数比使用地图和轴参数更清楚。

潘达斯重命名单列

如果您想要更名单一列,只需在列 dict 参数中传输单个关键值对。

1df1 = df.rename(columns={'Name': 'EmpName'})
2print(df1)

输出:

1EmpName ID Role
20 Pankaj 1 CEO
31 Lisa 2 Editor
42 David 3 Author

如果列字典中有不匹配的映射,结果将是相同的。

1df1 = df.rename(columns={'Name': 'EmpName', 'X': 'Y'})  # same result since there is no X column

潘达斯重命名指数

如果您想要更名索引,请通过索引参数的 dict。

1df2 = df.rename(index={0: '#0', 1: '#1', 2: '#2'})
2print('Renamed Indexes:\n', df2)

输出:

1Renamed Indexes:
2       Name ID Role
3#0 Pankaj 1 CEO
4#1 Lisa 2 Editor
5#2 David 3 Author

我们还可以使用 mapper 和 axis 参数重命名索引。

1df2 = df.rename({0: '#0', 1: '#1', 2: '#2'}, axis=0)  
2# axis='index' will work, first argument is assigned to 'mapper'

Panda Rename 单一指数

1df2 = df.rename(index={1: '#1'})
2print(df2)

输出:

1Name ID Role
20 Pankaj 1 CEO
3#1 Lisa 2 Editor
42 David 3 Author

5、更改数据框架

如果您想要更改源数据框本身,请将插座参数传输为 True。

 1import pandas as pd
 2
 3d1 = {'Name': ['Pankaj', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']}
 4
 5df = pd.DataFrame(d1)
 6
 7print('Source DataFrame:\n', df)
 8
 9df.rename(index={0: '#0', 1: '#1', 2: '#2'}, columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'}, inplace=True)
10
11print('Source DataFrame:\n', df)

输出:

 1Source DataFrame:
 2      Name ID Role
 30 Pankaj 1 CEO
 41 Lisa 2 Editor
 52 David 3 Author
 6
 7Source DataFrame:
 8    EmpName EmpID EmpRole
 9#0 Pankaj 1 CEO
10#1 Lisa 2 Editor
11#2 David 3 Author

使用 Mapper 函数重命名列

1df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})
2print(df)
3
4df.rename(mapper=str.lower, axis=1, inplace=True)
5print(df)

输出:

1NAME ID ROLE
20 Pankaj 1 CEO
31 Lisa 2 Editor
4
5     name id role
60 Pankaj 1 CEO
71 Lisa 2 Editor

使用函数重命名列和索引

1import pandas as pd
2import math
3
4df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})
5
6df.rename(columns=str.lower, index=math.degrees, inplace=True)
7print(df)

输出:

1name id role
20.00000 Pankaj 1 CEO
357.29578 Lisa 2 Editor

8. 严格的重命名和 Raising KeyError

1import pandas as pd
2
3df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})
4
5df1 = df.rename(columns={'Salary': 'EmpSalary'})  # unmatched mappings are ignored
6
7df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise')  # unmatched mappings raising KeyError

输出:

1Traceback (most recent call last):
2  File "/Users/pankaj/Documents/PycharmProjects/hello-world/journaldev/pandas/pandas_rename_column.py", line 58, in <module>
3    df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise')
4KeyError: "['Salary'] not found in axis"

9、参考

Published At
Categories with 技术
Tagged with
comments powered by Disqus