如何重命名Pandas列 [4个示例]

在pandas数据框中重命名列是一种常见操作。了解四种不同的方法来重命名pandas列。

Pandas是一种流行的Python数据分析库。我们需要分析的数据通常以不同的格式提供,包括csv和tsv文件、关系数据库等。您需要对数据进行一些初步检查,处理缺失值,并为进一步分析准备数据。

使用pandas,您可以:

  • 从各种数据源读取数据
  • 探索数据集并处理其中的缺失值
  • 分析数据集以获取洞察力

对于所有数据分析项目,您通常会从Python数据结构(如字典)创建数据帧。或者您还可以从其他来源(如csv文件)读取数据到数据帧中。

数据帧是pandas中的基本数据结构。它包含沿行的记录和沿列的各种字段或属性。

然而,您可能需要重命名列名,以使其更具描述性和可读性。在这里,您将学习四种不同的重命名列的方法。让我们开始吧!

创建Pandas数据帧

您可以在安装了pandas的 Jupyter notebook环境中跟随本教程。或者您也可以在Google Colab上跟随。

首先,我们将create a pandas dataframe并在教程的其余部分中使用它。

这是一个字典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属性

对于任何数据帧,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(columns={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。它是一个重命名了列的DataFrame副本。

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的列:

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

  • 通过提供一个将旧列名映射到新列名的字典来重命名列
  • 在原地重命名列而不创建新的数据框

你还可以以另一种方式使用重命名方法。

另一种重命名列的方法

让我们将列重命名为大写:

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中,你可以使用replace()方法和str.replace(this, with_this)语法来获取带有所需更改的字符串的副本。以下是一个例子:

>>> 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()方法

让我们回到dataframe的初始版本:

df = pd.DataFrame(books_dict)

您还可以使用set_axis()方法来重命名列。语法如下:

df.set_axis([列名列表], axis='columns')

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

df = df.set_axis(['标题', '作者', '类型', '评分'], 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(列名列表, axis='columns')

本教程到此结束!请查看collaborative notebooks for data analysis的列表。

类似文章