如何重命名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的列表。