如何用OSMnx循环计算多城市指标并单独导出CSV文件?
解决方案
问题根源
你的代码每次循环都将数据写入固定文件名df.csv,导致后续城市的数据直接覆盖之前的结果,最终仅保留最后一次循环的内容。
修改后的完整代码
import osmnx as ox import os # 新增:用于路径处理 ox.config(log_console=True, use_cache=True) import pandas as pd import networkx as nx import geopandas as gpd %matplotlib inline locations = ['Barcelona, Spain', 'Madrid, Spain', "Seville, Spain"] save_path = "/Users/hugocarpena/Desktop/" for location in locations: try: gdf = ox.geocode_to_gdf(location) area = ox.project_gdf(gdf).unary_union.area G = ox.graph_from_place(location, network_type="drive") stats = ox.basic_stats(G, area=area) for k, count in stats["streets_per_node_counts"].items(): stats["{}way_int_count".format(k)] = count for k, proportion in stats["streets_per_node_proportions"].items(): stats["{}way_int_prop".format(k)] = proportion del stats['streets_per_node_counts'] del stats['streets_per_node_proportions'] df = pd.DataFrame(pd.Series(stats, name="value")).round(3) # 生成以城市名称命名的文件名,替换特殊字符避免路径问题 filename = f"{location.replace(', ', '_')}.csv" full_path = os.path.join(save_path, filename) df.to_csv(full_path) print(f"已成功导出文件: {full_path}") except Exception as e: print(f"处理{location}时出错: {e}")
关键修改点
- 新增
import os用于规范路径拼接,避免手动拼接字符串出现分隔符错误 - 将固定保存路径提取为变量
save_path,便于后续维护 - 动态生成文件名:用
location.replace(', ', '_')将城市名称中的逗号、空格替换为下划线,生成如Barcelona_Spain.csv的合法文件名 - 使用
os.path.join()拼接完整路径,确保跨系统兼容性 - 添加导出成功提示,方便确认每个城市的处理状态
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

