首页 > 解决方案 > 在 Pandas Dataframe 中创建一个新列,从 URI 中提取域

问题描述

我为这个任务编写的代码工作得很好,但我知道它不是最 Python 的,所以我正在寻找一些建议。我有一个日志文件的数据框,其中一列有一个完整的 URL(主机名 + 路径等)。我写了这段代码来提取域:

    # Generate domain column from uri
    import uritools  
    domain = [] 
    for value in df['uri']: 
        try:
            nuri = [uritools.urisplit(value).authority if uritools.isuri(value) else value]
            domain.append(nuri) 
        except:
            domain.append(None)
    df['domain'] = domain

正如我所说,这有效,但它很难看。输出很好,但是当我尝试将其修剪为单衬时,它不起作用。这是我尝试过的:

df['domain'] = [uritools.urisplit(df.uri).authority if uritools.isuri(df.uri) else df.uri]

我得到的错误是:

TypeError: expected string or bytes-like object

我怎样才能改进这个更合适?

标签: pythonpandas

解决方案


您需要为列表理解提供一个可迭代的

df['domain'] = [uritools.urisplit(uri).authority if uritools.isuri(uri) else uri for uri in df.uri]

通知df.uri仅出现在行尾


推荐阅读