示例代码

import csv
import random

import pandas as pd
import numpy as np

china_regions = {
    "华北地区": {
        "北京市": ["朝阳区", "海淀区", "西城区", "东城区", "丰台区", "石景山区", "通州区", "顺义区"],
        "天津市": ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "滨海新区"],
        "河北省": ["石家庄市", "唐山市", "秦皇岛市", "邯郸市", "邢台市", "保定市", "张家口市"],
        "山西省": ["太原市", "大同市", "阳泉市", "长治市", "晋城市", "朔州市", "晋中市"],
        "内蒙古自治区": ["呼和浩特市", "包头市", "乌海市", "赤峰市", "通辽市", "鄂尔多斯市"]
    },
    "东北地区": {
        "辽宁省": ["沈阳市", "大连市", "鞍山市", "抚顺市", "本溪市", "丹东市", "锦州市"],
        "吉林省": ["长春市", "吉林市", "四平市", "辽源市", "通化市", "白山市", "松原市"],
        "黑龙江省": ["哈尔滨市", "齐齐哈尔市", "鸡西市", "鹤岗市", "双鸭山市", "大庆市", "伊春市"]
    },
    "华东地区": {
        "上海市": ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区"],
        "江苏省": ["南京市", "无锡市", "徐州市", "常州市", "苏州市", "南通市", "连云港市"],
        "浙江省": ["杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市"],
        "安徽省": ["合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市"],
        "福建省": ["福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市"],
        "江西省": ["南昌市", "景德镇市", "萍乡市", "九江市", "新余市", "鹰潭市", "赣州市"],
        "山东省": ["济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市"]
    },
    "华中地区": {
        "河南省": ["郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市"],
        "湖北省": ["武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市"],
        "湖南省": ["长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市"]
    },
    "华南地区": {
        "广东省": ["广州市", "韶关市", "深圳市", "珠海市", "汕头市", "佛山市", "江门市"],
        "广西壮族自治区": ["南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市"],
        "海南省": ["海口市", "三亚市", "三沙市", "儋州市", "五指山市", "琼海市", "文昌市"]
    },
    "西南地区": {
        "重庆市": ["渝中区", "大渡口区", "江北区", "沙坪坝区", "九龙坡区", "南岸区", "北碚区"],
        "四川省": ["成都市", "自贡市", "攀枝花市", "泸州市", "德阳市", "绵阳市", "广元市"],
        "贵州省": ["贵阳市", "六盘水市", "遵义市", "安顺市", "毕节市", "铜仁市", "兴义市"],
        "云南省": ["昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "普洱市"],
        "西藏自治区": ["拉萨市", "日喀则市", "昌都市", "林芝市", "山南市", "那曲市", "阿里地区"]
    },
    "西北地区": {
        "陕西省": ["西安市", "铜川市", "宝鸡市", "咸阳市", "渭南市", "延安市", "汉中市"],
        "甘肃省": ["兰州市", "嘉峪关市", "金昌市", "白银市", "天水市", "武威市", "张掖市"],
        "青海省": ["西宁市", "海东市", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州"],
        "宁夏回族自治区": ["银川市", "石嘴山市", "吴忠市", "固原市", "中卫市", "灵武市", "青铜峡市"],
        "新疆维吾尔自治区": ["乌鲁木齐市", "克拉玛依市", "吐鲁番市", "哈密市", "昌吉回族自治州", "博尔塔拉蒙古自治州"]
    }
}

csv_file = "data_m2_t1_s1.csv"

df = pd.read_csv(csv_file)

def getArea(row):
    client_ip = row['client_ip']
    ip = client_ip.split('.')[0]
    ip = int(ip)
    if ip in range(1, 41):
        return "东北地区"
    elif ip in range(41, 81):
        return "华北地区"
    elif ip in range(81, 121):
        return "华中地区"
    elif ip in range(121, 161):
        return "西北地区"
    elif ip in range(161, 201):
        return "西南地区"
    elif ip in range(201, 256):
        return "华东地区"

def getProvince(area):
    return random.choice(list(china_regions[area].keys()))


def getCity(area, province):
    return random.choice(list(china_regions[area][province]))
df['area'] = df.apply(lambda row: getArea(row), axis=1)
df['province'] = df.apply(lambda row: getProvince(row['area']), axis=1)
df['city'] = df.apply(lambda row: getCity(row['area'], row['province']), axis=1)

df.to_csv("data_m2_t1_s2.csv",
          index=False,
          encoding="utf-8",
          quoting=csv.QUOTE_NONE,
          quotechar="",
          escapechar="")