从Pandas单行单元格提取指定首尾的多字符串并转为列
解决Pandas提取HTML中特定URL并生成多列的问题
原代码失效原因
你写的正则里用了^和$锚点,这两个符号要求整行内容完全匹配目标URL格式,但实际目标URL只是HTML字符串里的一段子内容,所以根本匹配不到任何结果,自然返回空值。
修正方案
1. 正确提取URL列表
先去掉正则里的锚点,同时用非贪婪匹配.*?避免把多个URL连在一起提取:
import pandas as pd # 提取每行中所有符合条件的URL,得到列表格式的列 df['img_list'] = df['Images'].str.findall(r'https://www.website.com.my/media/catalog/product/cache/3f354f4955006fba9bb013076742094d.*?\.jpg')
2. 将列表展开为单独列
把提取到的URL列表拆分成多列,每列对应一个URL,最后合并回原DataFrame:
# 将列表列转换为多列 img_cols = df['img_list'].apply(pd.Series) # 给新列命名为img_1、img_2... img_cols.columns = [f'img_{idx+1}' for idx in img_cols.columns] # 合并原DataFrame和新列 df = pd.concat([df, img_cols], axis=1) # 可选:删除临时的img_list列 df.drop('img_list', axis=1, inplace=True)
这样处理后,每行提取到的URL会分别放在img_1、img_2等列中,没有URL的位置会显示NaN。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

