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方法。