将列附加到Python中的数组时创建的重复条目

时间:2018-10-23 04:03:43

标签: python arrays dataframe

我是Python新手,可以使用一些帮助。本质上,我试图从曲棍球联赛网站上抓取代码,以便可以将其拉入Excel,以查看我部门中的所有团队是否都具有相同数量的延迟时间。

我写了一些代码来刮除该部门每个团队的比赛。有10支球队,每支球队有16场比赛,因此应该有160个结果。条目以某种方式被重复,我得到了320条结果。

我认为这是因为我正在尝试将团队名称附加到一个数组,该数组用于保存在将其写入Pandas DataFrame之前抓取的已解析数据。当我删除代码以将名称添加到数组中的数据集时,我得到了预期的结果数(160),但是我的数据集没有与每个游戏关联的团队名称。

我知道我可以删除重复的数据,但是我试图理解为什么我得到了这些重复的数据,以及如何修复代码来避免这种情况。非常感谢您的帮助。

import requests
from bs4 import BeautifulSoup
import numpy as np
import pandas as pd

#define list of teams
teamIDs = np.array([[11954, "A Warthog"], [11945, "Blast"], [11951, "Cobra Kai"], [11947, "Homer's Heroes"], [11946, "Hudson Dusters"], [11952, "Le National"], [11948, "Les Boys"], [11953, "Molar Bears"], [11949, "NYAC"], [11950, "Top Shelf"]])

#define dataframe to store data
df = pd.DataFrame(columns=['date','day','time', 'teamname'])

#loop through team pages based on teamIDs stored in array to scrape data
for num in range(len(teamIDs)):
    r = requests.get('https://apps.dashplatform.com/dash/index.php?Action=team/index&company=chelsea&teamid={}'.format(teamIDs[num][0]))
    soup = BeautifulSoup(r.text, 'lxml')

    #loop through all game entries on the page and add them to the dataframe
    for li in soup.find_all('li'):
            try:
                #find <li> tags with specific class that holds data points as a string
                gameentry = li.find('h4', class_='list-group-item-heading').text

                #split string apart and assign to array
                games = gameentry.split()

                #add team name to array
                games.append(teamIDs[num][1])

                #add result to the dataframe
                df.loc[df.shape[0]] = games

            except AttributeError:
                continue

#output dataframe to excel file
writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()

1 个答案:

答案 0 :(得分:0)

我得到160个结果。请再次重新检查。在另一个主题上,我对您的脚本做了一些更改,使其看起来很简单。您无需在单个页面上使用Excelwriter。

vecsets::vsetdiff(x, y)
#[1] 1 3 8
vecsets::vsetdiff(x, z)
#[1] 1 5 7
vecsets::vsetdiff(x, c(5, 7))
#[1] 1 3 3 8