使用 Python 抓取网页时如何删除 pandas 数据框中的字符?

我正在尝试通过使用 Python 3 进行网络抓取,将本网站的表格转换为 .csv 文件: 2011-2012 NBA National Schedule

该表的开头如下:

                Revised Schedule                    Original Schedule


Date            Time      Game                Net   Time      Game                  Net

Sun., 12/25/11  12 PM     BOS (1) at NY (1)   TNT   12 PM     BOS (7) at NY (7)     ESPN

Sun., 12/25/11  2:30 PM   MIA (1) at DAL (1)  ABC   2:30 PM   MIA (8) at DAL (5)    ABC

Sun., 12/25/11  5 PM      CHI (1) at LAL (1)  ABC   5 PM      CHI (6) at LAL (9)    ABC

Sun., 12/25/11  8 PM      ORL (1) at OKC (1)  ESPN  no game   no game               no game

Sun., 12/25/11  10:30 PM  LAC (1) at GS (1)   ESPN  no game   no game               no game

Tue., 12/27/11  8 PM      BOS (2) at MIA (2)  TNT   no game   no game               no game

Tue., 12/27/11  10:30 PM  UTA (1) at LAL (2)  TNT   no game   no game               no game

我只对修订后的时间表感兴趣,即前 4 列。我想要的 .csv 文件中的输出如下所示:

http://img3.mukewang.com/638ee8a10001df1103290125.jpg

我正在使用这些包:


import re

import requests

import pandas as pd

import numpy as np

from bs4 import BeautifulSoup

from itertools import groupby

这是我为匹配我想要的格式所做的代码:


df = pd.read_html("https://www.sportsmediawatch.com/2011/12/revised-2011-12-nba-national-tv-schedule/", header=0)[0]


revisedCols = ['Date'] + [ col for col in df.columns if 'Revised' in col ]

df = df[revisedCols]


df.columns = df.iloc[0,:]


df = df.iloc[1:,:].reset_index(drop=True)



# Format Date to m/d/y

df['Date'] = np.where(df.Date.str.startswith(('10/', '11/', '12/')), df.Date + ' 11', df.Date + ' 12')

df['Date']=pd.to_datetime(df['Date'])

df['Date']=df['Date'].dt.strftime('%m/%d/%Y')


# Split the Game column

df[['Away','Home']] = df.Game.str.split('at',expand=True)   



# Final dataframe with desired columns

df = df[['Date','Time','Away','Home','Net']]


df.columns = ['Date', 'Time', 'Away', 'Home', 'Network']


print(df)


我注意到在“客场”和“主场”列中每个团队名称旁边都有 (1)、(2) 等。我如何实施抓取程序以删除“客场”和“主场”列中每个团队名称旁边的 (1)、(2) 等?


拉风的咖菲猫
浏览 153回答 4
4回答

慕标5832272

您可以在拆分游戏列后添加此代码df['Away']=df['Away'].astype(str).str[0:-4] df['Home']=df['Home'].astype(str).str[0:-4]

Cats萌萌

df['Away'] = df['Away'].str.replace('\(\d*\)', '').str.strip()df['Home'] = df['Home'].str.replace('\(\d*\)', '').str.strip()print (df.head())         Date      Time Away Home Network0  12/25/2011     12 PM  BOS   NY     TNT1  12/25/2011   2:30 PM  MIA  DAL     ABC2  12/25/2011      5 PM  CHI  LAL     ABC3  12/25/2011      8 PM  ORL  OKC    ESPN4  12/25/2011  10:30 PM  LAC   GS    ESPN

牛魔王的故事

不要在 ' 处拆分 Game 列'at,不要特别声明分隔符。.split()将在每个空白处拆分,然后您只需要 0 索引和 3rd 索引值。所以真的只需要更改 1 行代码:从df[['Away','Home']] = df.Game.str.split('at',expand=True) 到df[['Away','Home']] = df.Game.str.split(expand=True)[[0,3]]import pandas as pdimport numpy as npdf = pd.read_html("https://www.sportsmediawatch.com/2011/12/revised-2011-12-nba-national-tv-schedule/", header=0)[0]revisedCols = ['Date'] + [ col for col in df.columns if 'Revised' in col ]df = df[revisedCols]df.columns = df.iloc[0,:]df = df.iloc[1:,:].reset_index(drop=True)# Format Date to m/d/ydf['Date'] = np.where(df.Date.str.startswith(('10/', '11/', '12/')), df.Date + ' 11', df.Date + ' 12')df['Date']=pd.to_datetime(df['Date'])df['Date']=df['Date'].dt.strftime('%m/%d/%Y')# Split the Game columndf[['Away','Home']] = df.Game.str.split(expand=True)[[0,3]]   # Final dataframe with desired columnsdf = df[['Date','Time','Away','Home','Net']]df.columns = ['Date', 'Time', 'Away', 'Home', 'Network']print(df)

斯蒂芬大帝

您可以使用str.replace括号和数字str.strip,而且似乎在开头或结尾有一些空格:df['Away'] = df['Away'].str.replace('\(\d*\)', '').str.strip()df['Home'] = df['Home'].str.replace('\(\d*\)', '').str.strip()print (df.head())         Date      Time Away Home Network0  12/25/2011     12 PM  BOS   NY     TNT1  12/25/2011   2:30 PM  MIA  DAL     ABC2  12/25/2011      5 PM  CHI  LAL     ABC3  12/25/2011      8 PM  ORL  OKC    ESPN4  12/25/2011  10:30 PM  LAC   GS    ESPN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python