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

如何提取URL中的国家码并应用到Pandas DataFrame整列

问题描述

我有一个包含大量URL的Pandas DataFrame列,示例如下:

URL
www.myurl.com/python/us/learnpython
www.myurl.com/python/en/learnpython
www.myurl.com/python/fr/learnpython
.........

想要提取其中的国家码(如us、en、fr),新增名为Country的列存储。已经能对单个字符串实现提取:

url = 'www.myurl.com/python/us/learnpython'
country = url.split("python/")
country = country[1]
country = country.split("/")
country = country[0]

但用for循环应用到整列时失败,求可行实现方法。

解决方案

方法1:使用Pandas矢量化字符串操作(推荐,效率最高)

Pandas的str方法支持矢量化操作,无需手动循环,直接对整列处理:

import pandas as pd

# 假设你的DataFrame名为df
df['Country'] = df['URL'].str.split('python/', expand=True)[1].str.split('/', expand=True)[0]

逻辑说明:

  • str.split('python/', expand=True)将每个URL按python/分割为两列,取索引为1的列(即python/之后的部分)
  • 再对该列用str.split('/', expand=True)分割,取索引为0的列,即为目标国家码

方法2:使用正则表达式提取(更灵活)

如果URL格式有细微变化,正则表达式的适配性更强,用str.extract提取目标内容:

df['Country'] = df['URL'].str.extract(r'python/([^/]+)/')

逻辑说明:

  • 正则表达式r'python/([^/]+)/'中,([^/]+)匹配python/之后、下一个/之前的所有非/字符,也就是我们需要的国家码
  • str.extract会自动提取括号内分组的内容,生成新列

方法3:自定义函数+apply(兼容手动逻辑)

如果想沿用你原来的单个字符串处理逻辑,可以封装成函数后用apply批量处理(不推荐大数据量使用,效率低于前两种):

def extract_country(url):
    split_parts = url.split('python/')
    # 处理不符合格式的URL,避免索引越界
    if len(split_parts) >= 2:
        return split_parts[1].split('/')[0]
    return None

df['Country'] = df['URL'].apply(extract_country)

内容的提问来源于stack exchange,提问作者seevans38

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:15:30