Pandas 重命名列和索引
有时我们想重命名Pandas DataFrame对象中的列和索引。
我们可以使用pandas DataFramename()函数来重命名列和索引。
它支持以下参数。
mapper:字典或者要应用于列和索引的函数。
" axis"参数确定目标轴-列或者索引。index:必须是字典或者函数才能更改索引名称。
列:必须是字典或者函数才能更改列名。
axis:可以是int或者字符串。
与" mapper"参数一起使用可定义目标轴。
允许的值为("索引","列")或者数字(0、1)。
默认值为"索引"。就地:如果为True,则更改DataFrame。
否则,将返回一个新的DataFrame,并且当前DataFrame保持不变。
默认值为" False"。级别:可以是int或者级别名称。
在使用MultiIndex的情况下,仅重命名指定级别的标签。错误:可能的值为("忽略","提高"),默认值为"忽略"。
如果指定为" raise",则当类似dict的" mapper"," index"或者" columns"包含要转换的Index中不存在的标签时,会引发KeyError。
如果设置为" ignore",则现有键将被重命名,多余的键将被忽略。
有关rename()函数的一些重要点。
建议使用关键字参数来明确指定意图。
我们可以使用此函数重命名单列或者多列,具体取决于字典中的值。
让我们看一些使用Pandas named()函数的示例。
1.Pandas 重命名列
import pandas as pd d1 = {'Name': ['hyman', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']} df = pd.DataFrame(d1) print('Source DataFrame:\n', df) # rename columns df1 = df.rename(columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'}) print('Result DataFrame:\n', df1)
输出:
Source DataFrame: Name ID Role 0 hyman 1 CEO 1 Lisa 2 Editor 2 David 3 Author Result DataFrame: EmpName EmpID EmpRole 0 hyman 1 CEO 1 Lisa 2 Editor 2 David 3 Author
上面的rename()函数调用也可以按以下方式编写。
df1 = df.rename(mapper={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'}, axis='columns') # axis=1 corresponds to columns
很明显,使用关键字参数比使用映射器和轴参数更清晰。
2.Pandas 重命名单列
如果要重命名单个列,只需在column dict参数中传递单个键值对。
df1 = df.rename(columns={'Name': 'EmpName'}) print(df1)
输出:
EmpName ID Role 0 hyman 1 CEO 1 Lisa 2 Editor 2 David 3 Author
如果在列字典中存在不匹配的映射,则结果将相同。
df1 = df.rename(columns={'Name': 'EmpName', 'X': 'Y'}) # same result since there is no X column
3.Pandas 重命名索引
如果要重命名索引,请为" index"参数传递dict。
df2 = df.rename(index={0: '#0', 1: '#1', 2: '#2'}) print('Renamed Indexes:\n', df2)
输出:
Renamed Indexes: Name ID Role #0 hyman 1 CEO #1 Lisa 2 Editor #2 David 3 Author
我们还可以使用mapper和axis参数重命名索引。
df2 = df.rename({0: '#0', 1: '#1', 2: '#2'}, axis=0) # axis='index' will work, first argument is assigned to 'mapper'
4.Pandas 重命名单一索引
df2 = df.rename(index={1: '#1'}) print(df2)
输出:
Name ID Role 0 hyman 1 CEO #1 Lisa 2 Editor 2 David 3 Author
5.就地更改DataFrame
如果要更改源DataFrame本身,则将inplace参数传递为True。
import pandas as pd d1 = {'Name': ['hyman', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']} df = pd.DataFrame(d1) print('Source DataFrame:\n', df) df.rename(index={0: '#0', 1: '#1', 2: '#2'}, columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'}, inplace=True) print('Source DataFrame:\n', df)
输出:
Source DataFrame: Name ID Role 0 hyman 1 CEO 1 Lisa 2 Editor 2 David 3 Author Source DataFrame: EmpName EmpID EmpRole #0 hyman 1 CEO #1 Lisa 2 Editor #2 David 3 Author
6.使用映射器功能重命名列
df = pd.DataFrame({'NAME': ['hyman', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']}) print(df) df.rename(mapper=str.lower, axis=1, inplace=True) print(df)
输出:
NAME ID ROLE 0 hyman 1 CEO 1 Lisa 2 Editor name id role 0 hyman 1 CEO 1 Lisa 2 Editor
7.使用函数重命名列和索引
import pandas as pd import math df = pd.DataFrame({'NAME': ['hyman', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']}) df.rename(columns=str.lower, index=math.degrees, inplace=True) print(df)
输出:
name id role 0.00000 hyman 1 CEO 57.29578 Lisa 2 Editor
8.严格重命名并引发KeyError
import pandas as pd df = pd.DataFrame({'NAME': ['hyman', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']}) df1 = df.rename(columns={'Salary': 'EmpSalary'}) # unmatched mappings are ignored df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise') # unmatched mappings raising KeyError
输出:
Traceback (most recent call last): File "/Users/hyman/Documents/PycharmProjects/hello-world/theitroad/pandas/pandas_rename_column.py", line 58, in <module> df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise') KeyError: "['Salary'] not found in axis"