Добавление очищенного списка в Pandas Dataframe - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь вернуть URL-адреса для списка названий компаний, а затем обновить фрейм данных pandas, чтобы включить возвращенные URL-адреса.

Я импортирую все зависимости и читаю файл .csv:

import logging
import os
import pandas as pd
import re
from googlesearch import search

df = pd.read_csv('Building_Contractors_Stephen_V1.csv')

df.head()

df.head () результаты

Тогда яопределение функции, которая получает все URL:

def get_urls(tag, n, language):
    urls = [url for url in search(tag, stop=n, lang=language)][:n]
    return urls

Затем я проверяю это на одном URL:

test_return = get_urls(df.Hospital_Building_Contractors[0], 10, 'en') 
test_return     

, который возвращает список URL:

['https://www.turnerconstruction.com/',
 'http://www.turnerconstruction.com/careers',
 'http://www.turnerconstruction.com/office-network',
 'http://www.turnerconstruction.com/about-us',
 'http://www.turnerconstruction.com/turner-university',
 'http://www.turnerconstruction.com/careers/jobs',
 'http://www.turnerconstruction.com/about-us/where-we-work',
 'https://en.wikipedia.org/wiki/Turner_Construction',
 'https://en.wikipedia.org/wiki/Turner_Construction#History',
 'https://en.wikipedia.org/wiki/Turner_Construction#Early_years']

Похоже, я не могу понять, как перебирать все элементы в моих списках и добавлять их в новые столбцы в кадре данных.

Вот мой код для этого:

i = 0
num = len(df.Hospital_Building_Contractors)
while i < num:
    get_urls(df.Hospital_Building_Contractors[i], 1, 'en')
    df.insert(1, "URL", urls, allow_duplicates=True) 
    i += 1

, который возвращает эту ошибку:


NameError Traceback (последний вызов последним) в 17 в то время как я 19 df.insert (1, "URL", urls, allow_duplicates = True) 20 i + = 1 21

NameError: имя 'urls' не определено

Я уверен, что это простая проблема, но я в замешательстве.Я определяю 'urls' в функции get_urls ();поэтому я не уверен, почему я получаю эту ошибку.

В идеале, у меня есть решение, которое выглядит примерно так:

a = 0
num = len(df.Hospital_Building_Contractors)
while a < num:
    get_urls(df.Hospital_Building_Contractors[a], 1, 'en')
    df.insert(1, "URL", urls, allow_duplicates=True) 
    a += 1


b = 0
num = len(df.University_Building_Contractors)
while b < num:
    get_urls(df.University_Building_Contractors[b], 1, 'en')
    df.insert(3, "URL", urls, allow_duplicates=True) 
    b += 1


c = 0
num = len(df.Hospital_Building_Contractors)
while c < num:
    get_urls(df.Hospital_Building_Contractors[c], 1, 'en')
    df.insert(5, "URL", urls, allow_duplicates=True) 
    c += 1

, которое будет перебирать каждый список, находить URL-адреса и добавлять их в фрейм данных.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Добавление новых столбцов в фрейм данных может быть сделано ниже.

df["new column name"] = urls #list

Надеюсь, это поможет.

0 голосов
/ 13 февраля 2019

Использовать пользовательский lambda function с фильтром для работы только со строками:

from googlesearch import search

df = pd.read_csv('Building_Contractors_Stephen_V1.csv')
#print (df)


def get_urls(tag, n, language):
    urls = [url for url in search(tag, stop=n, lang=language)][:n]
    return urls

#for only one top1 value
f = lambda x: next(iter(get_urls(x, 1, 'en') if isinstance(x, str) else []), 'no value')
#for multiple top values, eg. top3
#f = lambda x: get_urls(x, 3, 'en') if isinstance(x, str) else []
df['a'] = df.Hospital_Building_Contractors.apply(f)
df['b'] = df.University_Building_Contractors.apply(f)
df['c'] = df.Military_Contractors.apply(f)

print (df.tail())
    Hospital_Building_Contractors University_Building_Contractors  \
104                Progressive AE                             NaN   
105           Hellas Construction                             NaN   
106               Wight & Company                             NaN   
107               PWI Engineering                             NaN   
108   Cordogan Clark & Associates                             NaN   

    Military_Contractors                                                a  \
104                  NaN  https://www.linkedin.com/company/progressive-ae   
105                  NaN               http://www.hellasconstruction.com/   
106                  NaN                         https://www.wightco.com/   
107                  NaN                            http://www.pwius.com/   
108                  NaN                    http://www.cordoganclark.com/   

            b         c  
104  no value  no value  
105  no value  no value  
106  no value  no value  
107  no value  no value  
108  no value  no value  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...