【问题标题】:How to clean image urls in pandas dataframe?如何清理熊猫数据框中的图片网址?
【发布时间】:2018-12-17 03:52:12
【问题描述】:

我有一个数据框,其中我有一些图像 url 存储在一个列中。 我需要清理图像 url 以进行进一步处理,目前图像 url 采用这种格式-

df['image url'][1]
'https://www.example.com/newshop/images/backup/detailed/olivia.jpg#{[EN]:;}'

df['image url'][2]
'https://www.example.com/newshop/images/backup/detailed/Monkey_copy.jpg#{[EN]:Monkey;}'

清理图片网址的最佳方法应该是什么,以便我在我的 datfarme 中拥有正确的图片网址?

【问题讨论】:

    标签: python string python-3.x pandas url


    【解决方案1】:

    使用str.split 通过索引str[0] 选择第一个列表:

    df['image url'] = df['image url'].str.split('#', 1).str[0]
    

    如果性能很重要并且没有NaNs,则使用列表理解:

    df['image url'] = [x.split('#', 1)[0] for x in df['image url']]
    

    时间安排

    df = pd.DataFrame({'image url':['https://www.example.com/newshop/olivia.jpg#{[EN]:;}',
                                    'https://www.example.com/newshop/Monkey_copy.jpg#{[EN]:Monkey;}']})
    #[20000 rows x 2 columns]
    df = pd.concat([df] * 10000, ignore_index=True)
    
    df['image url'] = [x.split('#', 1)[0] for x in  df['image url']]
    df['image url1'] = df['image url'].str.split('#', 1).str[0]
    print (df)
    
    In [215]: %timeit df['image url'] = [x.split('#', 1)[0] for x in  df['image url']]
    8.1 ms ± 1.53 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [216]: %timeit df['image url1'] = df['image url'].str.split('#', 1).str[0]
    21.4 ms ± 638 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
    

    【讨论】:

      【解决方案2】:

      根据您的示例,您可以使用 pd.Series.str.split 将字符串转换为 URL。这假设您在 URL 的任何重要部分都没有 #

      df = pd.DataFrame({'image url': ['https://www.example.com/newshop/images/backup/detailed/olivia.jpg#{[EN]:;}',
                                       'https://www.example.com/newshop/images/backup/detailed/Monkey_copy.jpg#{[EN]:Monkey;}']})
      
      df['image url'] = df['image url'].str.split('#', 1).str[0]
      # alternative:
      # df['image url'] = df['image url'].str.split('#', 1, expand=True).iloc[:, 0]
      
      print(df['image url'].iloc[0])
      
      https://www.example.com/newshop/images/backup/detailed/olivia.jpg
      

      【讨论】:

        猜你喜欢
        • 2019-05-13
        • 2018-10-29
        • 2017-04-29
        • 2018-09-20
        • 2021-10-05
        • 1970-01-01
        • 2017-05-26
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多