Pandas dataframe проверяет, находится ли строка в столбце для добавления - PullRequest
0 голосов
/ 24 мая 2018

У меня есть датафрейм pandas с одним из столбцов, который называется artist.Я хотел бы добавить новую строку, только если имя нового исполнителя отсутствует в этом столбце.

Я пытался, но безуспешно:

if (all_data != name.all(axis = 0)):
        all_data = all_data.append({'artist':str(name), 'netWorth':str(worth.strip())}, ignore_index = True)

Это весь код, который у меня есть:

def get_webpage(i, url):
    URL = url+str(i)
    response = requests.get(URL)
    return bs4.BeautifulSoup(response.text, 'html.parser')

COLUMNS = ['artist', 'netWorth']
all_data = pd.DataFrame(columns = COLUMNS)

def scrape(soup):
    artists = soup.find_all('article', class_ = 'thumb-wrap')
    for ar in artists:
        name = ar.h3.a.text
        worth = ar.div.find('div', class_='bc-networth').text
        global all_data 
        if (all_data['artist'] != name).any():
            all_data = all_data.append({'artist':str(name), 'netWorth':str(worth.strip())}, ignore_index = True)

i = 1
url = 'http://www.therichest.com/celebnetworth-category/celeb/singer/page/'
while (i<=14):
    soup = get_webpage(i, url)
    i = i+1
    data = scrape(soup)
i = 1
url = 'http://www.therichest.com/celebnetworth-category/celeb/musician/page/'
while (i<=7):
    soup = get_webpage(i, url)
    i = i+1
    data = scrape(soup)

1 Ответ

0 голосов
/ 24 мая 2018

Мне кажется, нужно проверить только один столбец artist:

if (all_data['artist'] != str(name)).all():

Образец :

all_data = pd.DataFrame({'netWorth':[5,3],
                        'artist':list('ab')})

print (all_data)
   netWorth artist
0         5      a
1         3      b

name = 'a'
b = 10

if (all_data['artist'] != str(name)).all():
    all_data = all_data.append({'artist':str(name), 'netWorth':b }, ignore_index = True)

print (all_data)
   netWorth artist
0         5      a
1         3      b
name = 'd'
b = 10

if (all_data['artist'] != name).all():
    all_data = all_data.append({'artist':str(name), 'netWorth':b }, ignore_index = True)

print (all_data)
   netWorth artist
0         5      a
1         3      b
2        10      d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...