如何在Python的Pandas中从URL提取用户ID?(数据框含105万行)
提取Googleusercontent URL中的用户ID(百万行Pandas数据框处理)
问题场景
现有一个包含1,050,000行的Pandas数据框,UserImage列存储三种格式的Googleusercontent图片URL,需要从中提取出用户ID生成UserIDs列:
原始URL示例:
UserImage https://play-lh.googleusercontent.com/a/AItbvmkI4RoZOTFftgRqwJ0QVl-OqLw0PXFRQsQmzPwayQ=mo https://play-lh.googleusercontent.com/EGemoI2NTXmTsBVtJqk8jxF9rh8ApRWfsIMQSt2uE4OcpQqbFu7f7NbTK05lx80nuSijCz7sc3a277R67g https://play-lh.googleusercontent.com/a-/AFdZucpr-V6JJAWHdTjxYVPa15fmQC7pWl5Xd5StFt1E'
期望结果:
UserIDs AItbvmkI4RoZOTFftgRqwJ0QVl-OqLw0PXFRQsQmzPwayQ EGemoI2NTXmTsBVtJqk8jxF9rh8ApRWfsIMQSt2uE4OcpQqbFu7f7NbTK05lx80nuSijCz7sc3a277R67g AFdZucpr-V6JJAWHdTjxYVPa15fmQC7pWl5Xd5StFt1E
高效解决方法
针对百万级数据量,推荐使用正则表达式结合Pandas的str.extract方法,既能统一处理三种URL格式,又能保证处理效率:
import pandas as pd # 假设数据框名为df df['UserIDs'] = df['UserImage'].str.extract(r'play-lh.googleusercontent.com/(?:a/|a-/)?([^=\']+)', expand=False)
正则表达式说明
play-lh.googleusercontent.com/:匹配固定域名部分(?:a/|a-/)?:非捕获组,匹配可选的a/或a-/前缀,?表示该部分可出现0或1次([^=\']+):捕获组,匹配所有不是=或'的字符,这就是我们要提取的用户ID
补充处理细节
如果存在URL前后有空格的情况(比如示例中的缩进空格),可以先做清洗:
df['UserImage'] = df['UserImage'].str.strip()
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

