如何将日期转换为合法文件名?使用Timestamp生成文件名报错怎么解决
报错根因
报错是由list_of_days中的元素为pandas.Timestamp类型导致:Folium的Choropleth组件不支持将Timestamp类型作为数据映射的键,直接用Timestamp做文件名也容易出现格式兼容问题。
解决代码
直接替换原有遍历逻辑即可:
for day in list_of_days: # 转换为匹配DataFrame列名的日期字符串,根据你的实际列名格式调整占位符 day_col_str = day.strftime("%Y-%m-%d") # 转换为标题用日期格式 day_title_str = day.strftime("%Y-%m-%d, %A") # 转换为文件名用日期格式,移除特殊字符避免系统兼容问题 day_file_str = day.strftime("%Y-%m-%d_%A") df_geo = df.copy() map1 = folium.Map(location=[-5.135399, 119.423790], tiles='openstreetmap', zoom_start=12) Choropleth(geo_data=df_geo.__geo_interface__, data=df_geo[day_col_str], key_on='feature.id', fill_color='RdPu', fill_opacity=0.7, legend_name='Daily Covid').add_to(map1) title_html = f'''<h3 align="center" style="font-size:20px"> <b>{day_title_str}</b></h3> ''' map1.get_root().html.add_child(folium.Element(title_html)) embed_map(map1, f'./html_maps/{day_file_str}_Covid.html')
修改说明
- 提前将Timestamp类型转为对应场景的字符串格式,消除类型不兼容报错
- 文件名移除了逗号等特殊字符,适配Windows、Linux等不同系统的文件名规则
- 直接调用Timestamp自带的
strftime方法,无需额外用datetime类转换,减少逻辑冗余
如果你的DataFrame日期列名不是%Y-%m-%d格式,修改day_col_str的格式化占位符和列名格式保持一致即可。
内容的提问来源于stack exchange,提问作者isfanafely
相关产品推荐
相关产品推荐

