You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27