基于电话号码起始字符匹配字典拆分并保存多DataFrame
解决方案
步骤说明
- 修正字典的引号格式(原字典使用中文引号会导致Python语法报错,需替换为英文引号)
- 从电话号码列提取前三位作为区号
- 反转区号-州名字典,实现通过区号快速匹配对应州名
- 循环匹配并导出对应州的联系人列表
完整代码
import pandas as pd # 修正后的区号字典(替换中文引号为英文引号) area_codes = { "New Hampshire": ["602"], "Vermont": ["803"] } # 创建示例DataFrame data = { "name": ["Bob", "Joe"], "job title": ["doctor", "pharmacist"], "phone number": ["602-123-4567", "803-123-4567"] } df = pd.DataFrame(data) # 提取电话号码的前三位作为区号 df["area_code"] = df["phone number"].str[:3] # 反转字典,得到{区号: 州名}的映射 code_to_state = {code: state for state, codes in area_codes.items() for code in codes} # 循环匹配并导出CSV for code, state in code_to_state.items(): # 筛选对应区号的行,删除临时生成的area_code列 state_df = df[df["area_code"] == code].drop(columns=["area_code"]) # 保存为指定格式的CSV文件,index=False避免导出索引列 state_df.to_csv(f"{state} contact list.csv", index=False)
代码解释
- 修正字典引号:Python仅支持英文引号作为字符串边界,原字典的中文引号会触发语法错误,必须替换。
- 提取区号:利用
str[:3]直接截取电话号码列的前3个字符,生成用于匹配的临时列area_code。 - 反转字典:将原字典的“州名→区号列表”结构转换为“区号→州名”,简化后续匹配逻辑,避免嵌套循环。
- 筛选导出:遍历每个区号,筛选出对应行后清理临时列,最终按要求命名并导出CSV文件。
内容的提问来源于stack exchange,提问作者datagolfer
相关产品推荐
相关产品推荐

