Python pd.to_datetime生成Date列为空 分组求均值返回nan如何解决
问题原因
- 日期字符串格式与解析格式不匹配:你拼接的日期字符串为
%d-%m(日-月)格式,但pd.to_datetime指定的format参数为%d%m,缺少中间的分隔符-,格式不匹配导致解析全部失败,返回空值NaT。 - 缺失年份参数:datetime类型必须包含年信息,你的数据集中
NK Any列就是2013年的年份值,未传入年份也会导致解析失败。
修正方案
方案1:修改原有拼接逻辑
# 补充年份、匹配解析格式即可正常解析 data["Date"] = data[u'NK Any'].apply(lambda x: str(x)) + '-' + data[u'Mes de any'].apply(lambda x: str(x)) + '-' + data[u'Dia de mes'].apply(lambda x: str(x)) data["Date"] = pd.to_datetime(data["Date"], format = '%Y-%m-%d', errors = 'coerce')
方案2:更高效的多列转日期写法(无需apply拼接)
pandas支持直接传入列名组成的字典转日期,性能更高、代码更简洁:
data["Date"] = pd.to_datetime({ 'year': data['NK Any'], 'month': data['Mes de any'], 'day': data['Dia de mes'] })
验证结果
修改后再执行后续分组统计代码即可得到正确结果:
accidents = data.groupby(['Date']).size() print(accidents.mean()) # 输出结果为27.5,即2013年巴塞罗那日均事故数约为28起
内容的提问来源于stack exchange,提问作者Clara Puglisi
相关产品推荐
相关产品推荐

