zl程序教程

您现在的位置是:首页 >  后端

当前栏目

如何在 Pandas DataFrame中重命名列?

pandas 如何 重命名 dataframe
2023-06-13 09:13:49 时间

DataFrame上最常见的操作之一是重命名(rename)列名称。

分析人员重命名列名称的动机之一是确保这些列名称是有效的Python属性名称。这意味着列名称不能以数字开头,而是带下画线的小写字母数字。好的列名称还应该是描述性的,言简意赅,并且不应与现有的DataFrame或Series属性冲突。

本文中,我们将重命名列名称。重命名的动机是使代码更易于理解,并让你的环境对你有所帮助。如果使用点表示法访问Series,则Jupyter将允许自动补全Series方法(但不允许在索引访问时自动补全方法)。

  • 举例

1)读取movie数据集。

movies = pd.read_csv("data/movie.csv")

2)DataFrame的重命名方法接收将旧值映射到新值的字典。

可以为这些列创建一个字典,如下所示。

 col_map = {
  "director_name": "director",
  "num_critic_for_reviews": "critic_reviews",
... }

3)将字典传递给重命名方法,并将结果分配给新变量。

 movies.rename(columns=col_map).head()
  • 原理

DataFrame上的.rename方法允许重命名列标签。可以通过给列属性赋值来重命名列。接下来将显示如何通过赋值给.column属性进行重命名。

  • 扩展

在此处,更改了列名称。还可以使用.rename方法重命名索引,如果列是字符串值,则更有意义。

因此,我们可以将索引设置为movie_title(电影片名)列,然后将这些值映射为新值。

 idx_map = {
  "Avatar": "Ratava",
  "Spectre": "Ertceps",
  "Pirates of the Caribbean: At World's End": "POC",
 }
 col_map = {
  "aspect_ratio": "aspect",
  "movie_facebook_likes": "fblikes",
 }

  movies.set_index("movie_title")
  .rename(index=idx_map, columns=col_map)
  .head(3)

重命名行标签和列标签有多种方法。

可以将Python列表赋值给索引和列属性。当列表具有与行和列标签相同数量的元素时,此赋值有

以下代码就显示了这样一个示例

从CSV文件中读取数据,并使用index_col参数告诉Pandas将movie_title列用作索引。

在每个Index对象上使用.to_list方法来创建Python标签列表。

在每个列表中修改3个值,将这3个值重新赋值给.index和.column属性。

 movies = pd.read_csv(
  "data/movie.csv", index_col="movie_title"

 ids = movies.index.to_list()
 columns = movies.columns.to_list()

# 使用列表赋值重命名行和列标签

 ids[0] = "Ratava"
 ids[1] = "POC"
 ids[2] = "Ertceps"
 columns[1] = "director"
 columns[-2] = "aspect"
 columns[-1] = "fblikes"
 movies.index = ids
 movies.columns = columns
 movies.head(3)

另一种选择是将一个函数传递给.rename方法。该函数接收一个列名称并返回一个新名称。假设列中有空格和大写字母,则此代码将清除它们。

 def to_clean(val):
     return val.strip().lower().replace(" ", "_")

 movies.rename(columns=to_clean).head(3)

在某些Pandas代码中,还可以看到用于清除列名的列表推导式。使用新的清除列表,可以将结果重新赋值给.columns属性。假设列中有空格和大写字母,此代码将清除它们。

 cols = [
  col.strip().lower().replace(" ", "_")
  for col in movies.columns
 ]
 movies.columns = cols
 movies.head(3) 

因为此代码更改了原始DataFrame,所以可以考虑使用.rename方法。