Python 有没有办法通过解析/拆分URL列表来创建数据框架?

Python 有没有办法通过解析/拆分URL列表来创建数据框架?,python,pandas,Python,Pandas,我想从url列表中创建一个dataframe,在这个列表中,我想按层次结构拆分每个url,并为其创建新的列。更具体地说,我想按域、协议、查询、片段和路径来划分url。我认为使用熊猫是可行的,我学会了这个解决方案,但没有得到预期的解决方案 示例数据片段 以下是中的示例数据片段,以下是我的尝试: import pandas as pd df=pd.read_csv('example data snippet.csv') df['protocol'],df['domain'],df['path'],

我想从url列表中创建一个dataframe,在这个列表中,我想按层次结构拆分每个url,并为其创建新的列。更具体地说,我想按域、协议、查询、片段和路径来划分url。我认为使用熊猫是可行的,我学会了这个解决方案,但没有得到预期的解决方案

示例数据片段

以下是中的示例数据片段,以下是我的尝试:

import pandas as pd

df=pd.read_csv('example data snippet.csv')
df['protocol'],df['domain'],df['path'],df['query'],df['fragment'] = zip(*df['url'].map(urlparse.urlsplit))
上面的尝试没有成功,因为它的输出不符合我的期望,所以我想知道有没有更好的方法来实现这一点。有人能告诉我怎么做吗?无论如何,要轻松完成这件事?有什么想法吗

所需输出

我想拆分url并为每个组件创建新列,最终数据框的列如下所示:

df.columns=['id', 'title', 'news source', 'topic', 'news category']
例如,在这个url中,我可以说:

'variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/'
'variety.com/2018/film/news/list-2018-oscar-nominations-1202668757/

news source =['variety.com','variety.com']
topic = ['tax-march-donald-trump-protest','list-2018-oscar-nominations']
new category = ['biz', 'film']
如何对给定的URL列表进行这种解析,并将它们添加到dataframe的新列中?不管怎样,要完成这件事?提前谢谢你有多少

我想我会一个接一个的,因为你忽略了随机数量的东西,你需要为忽略的东西写规则

如果您使用url.split(“/”),您将得到一个列表,但随后您需要删除您不需要的内容以保留您想要的内容

一旦你得到了你想要的东西,它将是一个很好的形状,你可以把它放到一个数据框中:

import pandas as pd

urls = ['variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/',
        'variety.com/2018/film/news/list-2018-oscar-nominations-1202668757/']

cols = ['c1', 'c2', 'c3', 'c4']
make_me = []
for url in urls:
    lst = url.split("/")
    # your business rules go here
    make_me.append([x for x in lst if not x.isdigit() and not x == ""])

df = pd.DataFrame(make_me, columns=cols)
df


    c1          c2    c3    c4
0   variety.com biz   news  tax-march-donald-trump-protest-1202031487
1   variety.com film  news  list-2018-oscar-nominations-1202668757
然后,您可以根据需要引用每个列:

df.c1

>
0    variety.com
1    variety.com
Name: c1, dtype: object

并且仍然把它们放在一起并编入索引。我认为这些规则可能会变得很严格,您可能需要将其特定于特定领域。

感谢您的解决方案。如何将
c4
列作为
纳税三月唐纳德·特朗普抗议
而不是
tax-march-donald-trump-抗议-1202031487
进行位修改?再次感谢您,将其拆分为“-”并去掉最后一个,但这可能只适用于多样化。谢谢,只为
c4
保留文本是否可行?你能告诉我怎么做吗?看看字符串函数iSigIDER(),我尝试这样:<代码>我在DF.C4: LS= I.分裂(“--”)RES.Apple(['```.x.x),如果不是x.ISDigId())。但是,中间的数字也不见了,我只想去掉文本尾上的数字。还有更好的主意吗?非常感谢。