如何重命名 Pandas 列 [4 Examples]

在 pandas 数据框架中为列重新命名是数据处理中的常见需求。本文将深入探讨四种不同的 pandas 列重命名方法。

Pandas 是一个广受欢迎的 Python 库,专门用于数据分析。 我们需要分析的数据通常以各种形式存在,例如 CSV、TSV 文件以及关系型数据库等。在深入分析之前,必须进行初步的数据检查、处理缺失值,并为进一步的分析准备数据。

借助 pandas,你可以:

  • 从各种来源提取数据。
  • 浏览数据集并处理其中的缺失值。
  • 深入分析数据集以获取有价值的见解。

在数据分析项目中,通常会从 Python 的数据结构(如字典)创建数据框架。 你也可以从其他来源导入数据,比如将 CSV 文件读取到数据框架中。

DataFrame 是 pandas 中至关重要的数据结构。它由沿行的记录和沿列的各种字段或属性构成。

为了提高数据框架的可读性,并且让列名更具描述性,你可能需要重新命名列。 本文将介绍四种不同的列重命名方法。 让我们开始吧!

创建 Pandas 数据框架

为了方便学习,建议你在安装了 pandas 的 Jupyter Notebook 环境中进行操作,或者使用 Google Colab。

首先,我们创建一个 pandas 数据框架,并在本教程的剩余部分使用它。

这是字典 book_dict

books_dict = {
    "one": [
        "Atomic Habits",
        "His Dark Materials",
        "The Midnight Library",
        "The Broken Earth",
        "Anxious People",
    ],
    "two": [
        "James Clear",
        "Philip Pullman",
        "Matt Haig",
        "N.K.Jemisin",
        "Fredrik Backman",
    ],
    "three": ["Nonfiction", "Fantasy", "Magical Realism", "Fantasy", "Fiction"],
    "four": [4, 5, 3, 5, 4],
}

首先,导入 pandas,然后使用 books_dict 创建数据框架 df

import pandas as pd

注意:在重命名列之前,我们将使用以下代码单元来创建数据框架的初始版本。

df = pd.DataFrame(books_dict)

可以使用 df.head() 方法查看数据框架 df 的前几行。 默认情况下,它会返回前五行。因为此处的 df 只有五行,所以 df.head() 将会显示整个数据框架。

df.head()

可以看到,当前的列名是字典的键。 但这些列名缺乏描述性。 所以我们需要将它们重新命名。 👩‍🏫

在 Pandas 中重命名列的方法

以下是在 pandas 中重命名列的各种方法:

  • 将数据框架的 columns 属性设置为新的列名列表。
  • 在数据框架上使用 rename() 方法。
  • 使用 str.replace 重命名一个或多个列。
  • 在数据框架上使用 set_axis() 方法。

设置列属性

对于任何数据框架,columns 属性都包含了列名称的列表:

df.columns
# Index(['one', 'two', 'three', 'four'], dtype="object")

现在,让我们重新命名这些列,使其具有描述性,然后调用 df.head() 查看结果:

df.columns = ['Title','Author','Genre','Rating']
df.head()

使用 rename() 方法

要重命名 pandas 中的列,可以使用 rename() 方法,其语法如下:

df.rename(column={mapping})

其中 mapping 可以是一个字典,其形式为:

{'old_col_name_1':'new_col_name_1', 'old_col_name_2':'new_col_name_2',...,
'old_col_name_n':'new_col_name_n'}

让我们从字典 books_dict 创建 df

df = pd.DataFrame(books_dict)

使用具有上述语法的 rename() 方法,我们得到 df_1。 这是数据框架的一个副本,其列已被重命名。

df_1 = df.rename(columns={'one':'Title','two':'Author','three':'Genre','four':'Rating'})
df_1.head()

修改 df_1 的列名:

但原始数据框架 df 的列名没有发生变化:

df.head()

因为此方法允许我们提供新旧列名称之间的映射,所以我们可以使用它来重命名单个列或多个列。

就地重命名列

如果想修改现有的数据框架,而不创建新副本,该怎么办?

为此,可以在方法调用中将 inplace 设置为 True

df.rename(columns={'one':'Title','two':'Author','three':'Genre','four':'Rating'},inplace=True)
df.head()

这将重命名原始数据框架 df 的列:

到目前为止,我们已经了解了如何:

  • 通过提供将旧列名映射到新列名的字典来重命名列。
  • 在适当的位置重命名列,而无需创建新的数据框架。

你还可以使用另一种方式来使用 rename 方法。

重命名列的另一种方法

让我们重命名这些列,使其变为大写:

df = pd.DataFrame(books_dict)
df.columns = ['TITLE','AUTHOR','GENRE','RATING']
df.head()

数据框架 df 现在看起来像这样:

假设我们想要将每个列名称更改为首字母大写。 我们可以在对象上指定函数或方法调用,而不是为每个列名提供字典,如下所示:

df.rename(str.title,axis="columns",inplace=True)
df.head()

在这里,我们将 axis 设置为 'columns',并使用 str.title 将所有列名称转换为首字母大写。

在列名字符串上使用 str.replace()

像往常一样,运行以下代码单元以从字典创建数据框架:

df = pd.DataFrame(books_dict)

在 Python 中,可以使用带有语法 str.replace(this, with_this)replace() 方法来获取包含所需更改的字符串副本。 这是一个例子:

>>> str1 = 'Marathon'
>>> str1.replace('Mara','Py')
'Python'

要知道 columns 属性包含一个包含列名称的字符串列表。 所以你可以像这样调用 str.replace('old_column_name','new_column_name')

df.columns = df.columns.str.replace('one','Title')
df.head()

这里,我们只将 “one” 列重命名为 “Title”,因此其他列名称保持不变。

现在,让我们使用相同的方法重命名其他列:

df.columns = df.columns.str.replace('two','Author')
df.columns = df.columns.str.replace('three','Genre')
df.columns = df.columns.str.replace('four','Rating')
df.head()

当只需要重命名一个或少数几个列时,这种方法非常有用。

使用 set_axis() 方法

让我们回到数据框架的初始版本:

df = pd.DataFrame(books_dict)

你也可以使用 set_axis() 方法重命名列。 其语法如下:

df.set_axis([list_of_column_names],axis="columns")

默认情况下,set_axis() 方法返回数据框架的副本。 但是,如果想就地修改数据框架,可以将 copy 设置为 False

df = df.set_axis(['Title','Author','Genre','Rating'],axis="columns",copy=False)
df.head()

结论

以下是对 pandas 数据框架中重命名列的不同方法的总结:

  • 对于示例数据框架 df,列属性 df.columns 是列名称的列表。 要重命名列,可以将此属性设置为新的列名称列表。
  • 重命名列的 rename() 方法使用以下语法: df.rename(columns={mapping}),其中 mapping 是指从旧列名到新列名的映射。 你还可以通过指定要应用于所有列名称的函数来使用 rename() 方法:df.rename(function or method call, axis='columns')
  • 与在 Python 字符串上使用 replace() 方法类似,可以使用 df.columns.str.replace('old_column_name', 'new_column_name') 来替换列名称。
  • 重命名列的另一种方法是使用 set_axis 方法,其语法为:df.set_axis(list_of_col_names,axis='columns')

本文教程到此结束! 你可以查看有关数据分析的协作笔记本列表。