DataFrame聚合后日期格式变化的原因及解决方案
问题根源
pandas对datetime64类型的列执行agg(set)聚合时,会自动将datetime对象转换为对应精度的整型时间戳存入集合,丢失了原有的日期格式信息,导致后续无法直接识别原始日期。
推荐解决方案(优先使用)
提前将日期列转为你需要的字符串格式后再执行聚合,从根源避免类型转换问题:
- 若A5列已为datetime类型,先做格式转换:
# 日期转目标格式字符串,空值统一填充为'nan'字符串 df['A5'] = df['A5'].dt.strftime('%d/%m/%Y').fillna('nan') # 执行分组聚合 df = df.groupby(['A1']).agg(set).reset_index()
- 若A5列是读入数据时被pandas自动识别为datetime类型,读入时可指定类型为字符串避免自动转换:
# 读csv示例,指定A5列为字符串类型 df = pd.read_csv('你的数据文件路径.csv', dtype={'A5': str}) # 后续直接执行分组聚合即可 df = df.groupby(['A1']).agg(set).reset_index()
备选方案(聚合后再转换)
如果已经完成聚合不想重新跑分组逻辑,可以单独处理A5列的时间戳:
def convert_ts_to_date(val_set): date_set = set() for v in val_set: if pd.isna(v): date_set.add('nan') else: # 时间戳单位根据实际精度调整,示例为纳秒级,若为毫秒级则修改unit为'ms' date_set.add(pd.to_datetime(v, unit='ns').strftime('%d/%m/%Y')) return date_set # 对A5列做格式转换 df['A5'] = df['A5'].apply(convert_ts_to_date)
内容的提问来源于stack exchange,提问作者Jayne How
相关产品推荐
相关产品推荐

