使用Pandas按年龄组计算平均骑行时长的问题排查
问题解决:按年龄组计算平均骑行时长失败的修复方案
问题根源
你的核心问题是Trip_in_min列类型为object,说明该列存在非数值内容(比如无效字符串、特殊字符)。小数据集刚好没有这类脏数据,所以能正常计算均值;但16K+行的完整数据集包含这类数据,导致mean()计算失效,仅返回分组键,同时触发FutureWarning。
修复步骤
1. 加载数据并清洗Trip_in_min列
读取CSV时直接处理目标列的类型转换,把无法转为数值的内容设为NaN:
import pandas as pd # 读取文件时,将Trip_in_min转为数值,无效值设为NaN file = pd.read_csv("file.csv", converters={"Trip_in_min": lambda x: pd.to_numeric(x, errors='coerce')}) # 可选:删除Trip_in_min为NaN的无效行(根据业务需求决定是否保留) # file = file.dropna(subset=["Trip_in_min"])
2. 计算各年龄组平均骑行时长
现在Trip_in_min是数值类型,即可正常执行分组均值计算:
# 按年龄组分组,计算平均骑行时长,保留Age_Groups为列 avg_trip_by_age = file.groupby('Age_Groups', as_index=False)['Trip_in_min'].mean() # 重命名列名提升可读性 avg_trip_by_age.rename(columns={"Trip_in_min": "Avg_Trip_in_min"}, inplace=True) print("各年龄组平均骑行时长:") print(avg_trip_by_age)
3. 整合完整统计代码
把原有统计逻辑和新的均值计算整合,代码更清晰:
import pandas as pd # 加载并清洗数据 file = pd.read_csv("file.csv", converters={"Trip_in_min": lambda x: pd.to_numeric(x, errors='coerce')}) # 可选:移除Age_Groups或Trip_in_min为空的无效行 # file = file.dropna(subset=["Age_Groups", "Trip_in_min"]) # 统计各年龄组骑行次数 trips_summary = file.Age_Groups.value_counts().reset_index() trips_summary.columns = ["Age_Groups", "Trip_Count"] print("各年龄组骑行次数:") print(trips_summary) print() # 统计TOP20热门站点 popular_stations = file.Start_Station_Name.value_counts().head(20).reset_index() popular_stations.columns = ["Start_Station_Name", "Trip_Count"] print("TOP20热门站点:") print(popular_stations) print() # 计算各年龄组平均骑行时长 avg_trip_by_age = file.groupby('Age_Groups', as_index=False)['Trip_in_min'].mean() avg_trip_by_age.rename(columns={"Trip_in_min": "Avg_Trip_in_min"}, inplace=True) print("各年龄组平均骑行时长:") print(avg_trip_by_age)
额外说明
errors='coerce'会将无法转换为数值的内容转为NaN,Pandas的mean()方法默认会忽略NaN值,不影响均值计算- FutureWarning通常是由于Pandas版本兼容问题,建议升级到较新版本的Pandas,或按照警告提示调整语法
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

