Создать новый столбец (фрейм данных) на основе суффикса его элементов - PullRequest
1 голос
/ 03 апреля 2020

У меня есть следующий набор данных, построенный с использованием pandas:

    URLS  \
0

1                   www.gene.eu   
2  www.cittametropolitana.me.it   
3     www.regione.basilicata.it   
4    www.bbc.co.uk   

                                               Paths  
0                                                     
1            /news-room/q-a-detail/ 
2                     /emergenza-sanitari/  
3                     /giunta/site/giunta/detail.jsp  
4  /focus/  

И я хотел бы проверить суффикс каждого URL-адреса (eu, it, co.uk, ...), назначая один из эти значения:

suffix=['.it','.uk','.eu'] # this should be used as set which includes all the suffix that I want to check
country=['Italy','United Kingdom','Europe'] # values to assign based on the suffix

zipped = list(zip(suffix, country)) # create a connection between suffix and country

Я пытался несколькими способами, спасибо также нескольким пользователям, которые помогли мне с этой проблемой) добавить этот новый столбец с суффиксной информацией в моем образце фрейма данных, но безуспешно (пожалуйста, найдите здесь вопрос, связанный с этой проблемой, с другим примером: Добавление нового столбца с условием ):

country = {k.lower() : v for (k,v) in zipped}
og = {k : v for (k,v) in suffix}
country.update(og)
# (1)
df['value'] = df['URLS'].str.split(".", expand=True).stack().reset_index(1).query(
    "level_1 == level_1.max()"
)[0].map(country)

# (2)
original_domain = {x: y for x, y  in zipped}

df['value'] = df['URLS'].apply(lambda sen : original_domain.get( sen[-1], 'Unknown') ) )

# (3)
df['value']=df['URLS'].map(lambda x: x[-3:] in zipped) 

#(4)
df['value'] = np.where(df['URLS'].str.endswith(suffix), pd.to_datetime(df['value'])) # it returns me errors and t needs another step to assign country

, но ни один из этих фрагментов кода не работает. URLS - это столбец, полученный путем анализа ссылок. Я думаю, что проблема может заключаться в определении значения столбца из вычисляемого элемента без создания списка, поэтому мне нужно будет создать его в зависимости от URL-адресов. Поэтому я хотел бы спросить вас, как добавить эти новые столбцы, чтобы найти окончание суффикса и присвоить соответствующее значение (Италия, Великобритания, ...).

Надеюсь, вы мне поможете.

Спасибо

Редактировать:

df определяется следующим образом:

df=pd.read_csv('path/text.csv', sep=';', engine='python')

Я думаю, это может вызвать ошибка при попытке применить код, предложенный sK500 .

1 Ответ

1 голос
/ 03 апреля 2020

Там вы go, если я правильно понял:

import pandas as pd


suffix = ['it', 'uk', 'eu']
country = ['Italy', 'United Kingdom', 'Europe']
mapping = dict(zip(suffix, country))
urls = ['www.gene.eu', 'www.cittametropolitana.me.it', 'www.regione.basilicata.it', 'www.bbc.co.uk']
paths = ['/news-room/q-a-detail/', '/emergenza-sanitari/', '/giunta/site/giunta/detail.jsp', '/focus/']
frame = pd.DataFrame(zip(urls, paths), columns=['urls', 'paths'])
for ext in mapping:
    frame.loc[frame['urls'].apply(lambda x: x.split('.')[-1]) == ext, 'Country'] = mapping[ext]
print(frame)

Out:

                           urls                           paths         Country
0                   www.gene.eu          /news-room/q-a-detail/          Europe
1  www.cittametropolitana.me.it            /emergenza-sanitari/           Italy
2     www.regione.basilicata.it  /giunta/site/giunta/detail.jsp           Italy
3                 www.bbc.co.uk                         /focus/  United Kingdom

и обратите внимание, что для того, чтобы это работало правильно, вам нужно добавить все расширения вы хотите включить в отображение заранее, и данные должны быть единообразными (вы должны убедиться, что каждый URL имеет . и заканчивается расширением, включенным в отображение, в противном случае вы получите nan значений, которые вы не хотели бы ' не хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...