如何基于Pandas中值为列表的列创建仅含uploads链接的新列
解决方法:从DataFrame的列表列中筛选含特定关键词的链接
要实现从每行的链接列表中仅保留包含"uploads"的链接并生成新列,你可以用Pandas的apply方法结合列表推导式,这是最直接高效的方式:
核心代码
import pandas as pd # 假设你的DataFrame名为df,存储链接列表的列名为'link_list' df['filtered_upload_links'] = df['link_list'].apply( lambda x: [link for link in x if 'uploads' in link] )
代码说明
apply方法会遍历link_list列的每一行(每个链接列表)- 内嵌的lambda函数通过列表推导式,逐个检查列表中的链接:仅保留包含"uploads"子串的链接
- 筛选后的新列表会被赋值到新列
filtered_upload_links中
示例验证
用你提供的测试数据构造示例DataFrame,验证效果:
# 构造示例数据 sample_data = { 'link_list': [ [ 'https://seekingalpha.com/instablog/5006891-hfir/4960045-natural-gas-daily', 'https://seekingalpha.com/article/4116929-weekly-natural-gas-storage-report', 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-15090647719993095_origin.png', 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-15090647854075453_origin.png', 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-1509065004154725_origin.png', 'https://seekingalpha.com/account/research/subscribe?slug=hfir-energy&sasource=upsell' ] ] } df = pd.DataFrame(sample_data) # 执行筛选 df['filtered_upload_links'] = df['link_list'].apply(lambda x: [link for link in x if 'uploads' in link]) # 查看结果 print(df['filtered_upload_links'].iloc[0])
执行后输出的结果就是你需要的筛选后的链接列表:
[ 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-15090647719993095_origin.png', 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-15090647854075453_origin.png', 'https://static.seekingalpha.com/uploads/2017/10/26/5006891-1509065004154725_origin.png' ]
额外说明
- 如果原列表为空或没有符合条件的链接,该方法会返回空列表,不会抛出异常
- 若需要忽略大小写匹配(比如同时匹配"UPLOADS"),可修改判断条件为
'uploads' in link.lower()
内容的提问来源于stack exchange,提问作者themellion
相关产品推荐
相关产品推荐

