在 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')
。
本文教程到此结束! 你可以查看有关数据分析的协作笔记本列表。