如何基于电影DataFrame按年代分组计算IMDB评分均值并处理脏数据?
问题
我有一个电影DataFrame,仅关注电影名称、Oscar Year、IMDB Rating列,需求如下:
- 按
Oscar Year列(包含1926至2020等年份)排序; - 将年份划分为年代(十年为一组),计算每组的IMDB评分均值。
另外,我在处理Oscar Year列的脏数据时用了多次str.replace方法,希望得到更优方案。
以下是我的尝试代码:
import pandas as pd mv = pd.read_csv('data_1_7.csv') # 处理脏数据的方式,希望得到优化建议 mv['Oscar Year']=mv['Oscar Year'].str.replace('/28',"") mv['Oscar Year']=mv['Oscar Year'].str.replace('/29',"") mv['Oscar Year']=mv['Oscar Year'].str.replace('/30',"") mv['Oscar Year']=mv['Oscar Year'].str.replace('/31',"") mv['Oscar Year']=mv['Oscar Year'].str.replace('/32',"") mv['Oscar Year']=mv['Oscar Year'].str.replace('/33',"") mv['Oscar Year'].sort_values() GroupByMean = mv.groupby('Oscar Year')[['IMDB Rating']].mean(numeric_only=True).reset_index() # 这里得到了按年份分组的数据,但不是按年代分组的结果 mv['Oscar Year'] = mv['Oscar Year'].astype('int') Rating10['Bins'] = pd.cut(mv['Oscar Year'], bins = 10, precision=0).unique() Rating10['Rating'] = mv['IMDB Rating'] # 这里得到了无效数据
解决方案
1. 优化脏数据处理
多次调用str.replace效率低下,可通过正则表达式一次性清理Oscar Year列的多余内容:
import pandas as pd mv = pd.read_csv('data_1_7.csv') # 去掉斜杠及后面的所有字符,保留年份主体 mv['Oscar Year'] = mv['Oscar Year'].str.replace(r'/.*', '', regex=True) # 转换为整数类型 mv['Oscar Year'] = mv['Oscar Year'].astype(int)
如果数据中存在其他格式的脏数据(比如混杂非数字字符),可直接提取四位数字年份:
mv['Oscar Year'] = mv['Oscar Year'].str.extract(r'(\d{4})').astype(int)
2. 按Oscar Year排序
使用sort_values方法完成排序,可选择直接修改原数据或生成新的排序后DataFrame:
# 直接修改原DataFrame完成排序 mv.sort_values('Oscar Year', inplace=True) # 或生成新的排序后DataFrame sorted_mv = mv.sort_values('Oscar Year')
3. 按年代分组计算IMDB评分均值
通过整数除法将年份转换为年代标识(如1926→1920、1935→1930),再分组计算均值:
# 生成年代列 mv['Decade'] = (mv['Oscar Year'] // 10) * 10 # 按年代分组计算平均评分 decade_mean_rating = mv.groupby('Decade')[['IMDB Rating']].mean(numeric_only=True).reset_index() # 重命名列名增强可读性 decade_mean_rating.rename(columns={'IMDB Rating': 'Average IMDB Rating'}, inplace=True) print(decade_mean_rating)
内容的提问来源于stack exchange,提问作者Алексей Курочкин
相关产品推荐
相关产品推荐

