基于Python Pandas实现IP前两段匹配对应地区的代码问题
问题解决方法
你的代码存在语法错误,同时可以用更高效的方式实现需求,具体修正和优化如下:
1. 核心语法错误
df.iterrows 是Pandas的方法,必须加上括号 df.iterrows() 才能生成可遍历的迭代器,否则循环会直接拿到方法对象,无法遍历行数据。
2. 效率优化:替换行遍历为向量化操作
Pandas的优势是向量化计算,用行遍历的方式效率较低,推荐直接通过字符串匹配筛选数据。
修正后的代码
import pandas as pd # 读取CSV,若CSV自带表头(比如第一行是ip_prefix、region),请删除names参数 df = pd.read_csv('test.csv', names=['col1', 'col2'], sep=',') def ipsheet(): val = input('Enter the ip address : ') # 提取IP地址的前两段 val1 = ".".join(val.split(".")[0:2]) print(f"匹配前缀:{val1}") # 筛选col1中以目标前缀开头的行,取第一个匹配的地区 match_result = df[df['col1'].str.startswith(val1)]['col2'].iloc[0] print(f"对应地区:{match_result}") # 若需要获取所有匹配结果,可转为列表 # all_results = df[df['col1'].str.startswith(val1)]['col2'].tolist() # print(f"所有匹配地区:{all_results}") ipsheet()
额外提示
- 如果输入的IP格式可能不合法,可以增加格式校验逻辑,比如用正则表达式验证输入是否符合IP格式。
- 若CSV文件的第一行是表头(而非数据),务必删除
names=['col1', 'col2']参数,避免覆盖原有表头。
内容的提问来源于stack exchange,提问作者pravinraj66
相关产品推荐
相关产品推荐

