在df上运行我的python循环并在df中打印响应

时间:2018-10-16 12:50:54

标签: python python-3.x pandas

我在Pandas中有一个数据框:

In [10]: df
Out[10]: 
                     Domain     Use
0        graph.facebook.com    4242
1            news.bbc.co.uk   23423
2  news.more.news.bbc.co.uk  234432
3       profile.username.co  235523
4           offers.o2.co.uk  235523
5     subdomain.pyspark.org    2325
6       uds.data.domain.net   23523
7         domain.akamai.net   23532

我有一个脚本,可以在数据框的单个列上运行该脚本:完全可以按照我的意愿工作。

In [13]: for row in df.iterrows():
    ...:     cdns = ['akamai', 'maxcdn', 'cloudflare']
    ...:     tld = ['co.uk', 'com', 'org', 'co', 'net']
    ...:     index = df.Domain[df.Domain.str.strip().str.endswith(tuple(tld))].str.split('.').tolist()
    ...:
    ...: for x in index:
    ...:     if (x[len(x)-2]) in cdns:
    ...:         if str(x[len(x)-1]) in tld:
    ...:             print(str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
    ...:     elif (x[len(x)-2]) in cdns:
    ...:         if str(x[len(x)-2]).rstrip()+'.'+ str(x[len(x)-1]).rstrip() in tld:
    ...:              print(str(x[len(x)-4])+'.'+ str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
    ...:     elif str(x[len(x)-2]).rstrip()+'.'+ str(x[len(x)-1]).rstrip() in tld:
    ...:         print(str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
    ...:     elif str(x[len(x)-1]) in tld:
    ...:          print(str(x[len(x)-2])+'.'+ str(x[len(x)-1]))

但是,我需要在数据帧中添加一个新列,并将脚本的结果作为内容。所以我想有以下几列: -域名 - 采用 -新域

其中newdomain =我脚本的结果。

我该怎么做?我搜索过高低,但没有成功

更新 我在下面尝试过-但它将名为index的系列添加到该列中。我需要for循环的结果:

In [14]: df
Out[14]: 
                     Domain     Use
0        graph.facebook.com    4242
1            news.bbc.co.uk   23423
2  news.more.news.bbc.co.uk  234432
3       profile.username.co  235523
4           offers.o2.co.uk  235523
5     subdomain.pyspark.org    2325
6       uds.data.domain.net   23523
7         domain.akamai.net   23532

In [15]: df['newdomain']=index

    In [16]: df
    Out[16]: 
                         Domain     Use                        newdomain
    0        graph.facebook.com    4242           [graph, facebook, com]
1            news.bbc.co.uk   23423              [news, bbc, co, uk]
2  news.more.news.bbc.co.uk  234432  [news, more, news, bbc, co, uk]
3       profile.username.co  235523          [profile, username, co]
4           offers.o2.co.uk  235523             [offers, o2, co, uk]
5     subdomain.pyspark.org    2325        [subdomain, pyspark, org]
6       uds.data.domain.net   23523         [uds, data, domain, net]
7         domain.akamai.net   23532            [domain, akamai, net]

因此for循环将输出:facebook.com,bbc.co.uk等。

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题

import pandas as pd
df=pd.DataFrame({'Domain':[' graph.facebook.com','news.bbc.co.uk ']})
df['new_domain']=df.Domain.str.split('.',1, expand=True)[1] # split on '.' then take second element