Панды копируют значения из другого фрейма данных в мой фрейм данных - PullRequest
1 голос
/ 10 июля 2019

У меня есть 2 кадра данных: df_mentions, где у меня есть URL-адреса, и media, где у меня есть информация о некоторых журналах.Мне нужно постоянно обновлять df_mentions информацией, содержащейся в СМИ.

Mentions=['https://www.lemonde.fr/football/article/2019/07/08/coupe-du-monde-feminine-2109-au-sein-de-chaque-equipe-j-ai-vu-de-grandes-joueuses_5486741_1616938.html','https://www.telegraph.co.uk/world-cup/2019/06/12/womens-world-cup-2019-groups-complete-guide-teams-players-rankings/','https://www.washingtonpost.com/sports/dcunited/us-womens-world-cup-champs-arrive-home-ahead-of-parade/2019/07/08/48df1a84-a1e3-11e9-a767-d7ab84aef3e9_story.html?utm_term=.8f474bba8a1a']
Date=['08/07/2019','08/07/2019','08/07/2019']
Publication=['','','']
Country=['','','']
Foundation=['','','']
Is_in_media=['','','']
df_mentions=pd.DataFrame()
df_mentions['Mentions']=Mentions
df_mentions['Date']=Date
df_mentions['Source']=Source
df_mentions['Country']=Country
df_mentions['Foundation']=Foundation
df_mentions['Is_in_media']=Is_in_media

Source=['New York times','Lemonde','Washington Post']
Link=['https://www.nytimes.com/','https://www.lemonde.fr/','https://www.washingtonpost.com/']
Country=['USA','France','USA']
Foundation=['1851','1944','1877']
media=pd.DataFrame()
media['Source']=Source
media['Link']=Link
media['Country']=Country
media['Foundation']=Foundation
media

И они выглядят так (но с почти 1000 строк ежедневно) df_mentions

media

media

и мне нужно проверить, содержится ли источник ссылки на носителе, извлечь из него данные для заполнения df_mentions и получитьследующий результат:

Ожидаемый: enter image description here

И то, что я сделал, это:

for index in range(0,len(media)):
    for index2 in range(0,len(df_mentions)):
        if str(media['Link'][index])in str(df_mentions['Mentions'][index2]):
            df_mentions['Publication'][index2]=media['Publication'][index]
            df_mentions['Country'][index2]=media['Country'][index]
            df_mentions['Foundation'][index2]=media['Foundation'][index]
            df_mentions['Is_in_media'][index2]='Yes'
        else:
            df_mentions['Is_in_media'][index2]='No'
df_mentions

Но это работает на моем ноутбуке один раз, и если я закрываю ноутбук выдает ошибки, я использую Pandas 0.24.0.Есть ли лучший способ сделать это и разрешить работать все время?

Заранее спасибо!Будем благодарны за любую помощь!

1 Ответ

1 голос
/ 10 июля 2019

Одна вещь, которую вы можете сделать, это извлечь URL в df_mentions и использовать его в качестве ключа для слияния

Начальные данные (удалены пустые столбцы в df_mentions):

print(df_mentions)
                                            Mentions        Date
0  https://www.lemonde.fr/football/article/2019/0...  08/07/2019
1  https://www.telegraph.co.uk/world-cup/2019/06/...  08/07/2019
2  https://www.washingtonpost.com/sports/dcunited...  08/07/2019

print(media)
            Source                             Link Country Foundation
0   New York times         https://www.nytimes.com/     USA       1851
1          Lemonde          https://www.lemonde.fr/  France       1944
2  Washington Post  https://www.washingtonpost.com/     USA       1877

Создать новый столбец, содержащий базовый URL:

df_mentions['url'] = df_mentions['Mentions'].str.extract(r'(http[s]?:\/\/.+?\/)')

   Mentions                                   Date        url
0  https://www.lemonde.fr/football/articl...  08/07/2019  https://www.lemonde.fr/
1  https://www.telegraph.co.uk/world-cup/...  08/07/2019  https://www.telegraph.co.uk/
2  https://www.washingtonpost.com/sports/...  08/07/2019  https://www.washingtonpost.com/

Использовать этот новый столбец в качестве ключа при объединении:

df_mentions.merge(media,
                  left_on='url',
                  right_on='Link',
                  how='left').drop(columns=['url', 'Link'])

   Mentions                                Date        Source           Country Foundation
0  https://www.lemonde.fr/football/art...  08/07/2019  Lemonde          France  1944     
1  https://www.telegraph.co.uk/world-c...  08/07/2019  NaN              NaN     NaN      
2  https://www.washingtonpost.com/spor...  08/07/2019  Washington Post  USA     1877 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...