Pandas 重命名列和索引

时间:2020-02-23 14:42:09  来源:igfitidea点击:

有时我们想重命名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"