如何用Python从数据库取数据批量替换CSV列中的车辆名为对应ID?
批量用数据库映射替换CSV列内容
核心思路
先从数据库导出车辆名称-ID的映射字典,再用pandas的map()方法对CSV目标列做批量替换,比逐个写replace()高效得多,尤其适合几千条映射的场景。
步骤1:从数据库获取映射字典
假设你的数据库里有一张存储映射关系的表(比如叫vehicle_mappings),包含vehicle_name(车辆名称)和vehicle_id(对应ID)两列。用pandas直接读取这张表并转成字典:
import pandas as pd import pymysql # 也可以用SQLAlchemy、psycopg2等对应数据库的驱动 # 建立数据库连接 db_conn = pymysql.connect( host="你的数据库地址", user="数据库用户名", password="数据库密码", database="目标数据库名" ) # 读取映射表数据 mapping_data = pd.read_sql("SELECT vehicle_name, vehicle_id FROM vehicle_mappings", db_conn) # 转成{名称: ID}的字典格式 name_id_map = mapping_data.set_index("vehicle_name")["vehicle_id"].to_dict() # 关闭数据库连接 db_conn.close()
步骤2:读取CSV并批量替换
用map()方法将CSV目标列的车辆名称替换为对应ID,还可以用fillna()处理找不到匹配项的情况:
# 读取原始CSV csv_df = pd.read_csv("你的原始CSV文件路径.csv") # 替换目标列(假设目标列名为`car_name`) # 找不到匹配的名称时,可设置默认值,比如"未知ID"或保留原名称 csv_df["car_name"] = csv_df["car_name"].map(name_id_map).fillna("未知ID") # 保存处理后的CSV csv_df.to_csv("处理完成的CSV文件路径.csv", index=False)
额外优化:处理名称匹配偏差
如果CSV里的名称和数据库里的存在大小写、多余空格等差异,先统一清洗再映射:
# 清洗数据库映射的名称:去除首尾空格、转小写 mapping_data["vehicle_name"] = mapping_data["vehicle_name"].str.strip().str.lower() # 清洗CSV目标列的名称 csv_df["car_name"] = csv_df["car_name"].str.strip().str.lower() # 重新生成映射字典并替换 name_id_map = mapping_data.set_index("vehicle_name")["vehicle_id"].to_dict() csv_df["car_name"] = csv_df["car_name"].map(name_id_map).fillna("未知ID")
内容的提问来源于stack exchange,提问作者Nero
相关产品推荐
相关产品推荐

