为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2022-12-06 15:00:25
我正在尝试通过使用 Python 3 进行网络抓取,将本网站的表格转换为 .csv 文件: 2011-2012 NBA National Schedule该表的开头如下:                Revised Schedule                    Original ScheduleDate            Time      Game                Net   Time      Game                  NetSun., 12/25/11  12 PM     BOS (1) at NY (1)   TNT   12 PM     BOS (7) at NY (7)     ESPNSun., 12/25/11  2:30 PM   MIA (1) at DAL (1)  ABC   2:30 PM   MIA (8) at DAL (5)    ABCSun., 12/25/11  5 PM      CHI (1) at LAL (1)  ABC   5 PM      CHI (6) at LAL (9)    ABCSun., 12/25/11  8 PM      ORL (1) at OKC (1)  ESPN  no game   no game               no gameSun., 12/25/11  10:30 PM  LAC (1) at GS (1)   ESPN  no game   no game               no gameTue., 12/27/11  8 PM      BOS (2) at MIA (2)  TNT   no game   no game               no gameTue., 12/27/11  10:30 PM  UTA (1) at LAL (2)  TNT   no game   no game               no game我只对修订后的时间表感兴趣,即前 4 列。我想要的 .csv 文件中的输出如下所示:我正在使用这些包:import reimport requestsimport pandas as pdimport numpy as npfrom bs4 import BeautifulSoupfrom 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/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('at',expand=True)   # Final dataframe with desired columnsdf = df[['Date','Time','Away','Home','Net']]df.columns = ['Date', 'Time', 'Away', 'Home', 'Network']print(df)我注意到在“客场”和“主场”列中每个团队名称旁边都有 (1)、(2) 等。我如何实施抓取程序以删除“客场”和“主场”列中每个团队名称旁边的 (1)、(2) 等?
查看完整描述

4 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

您可以在拆分游戏列后添加此代码

df['Away']=df['Away'].astype(str).str[0:-4]
df['Home']=df['Home'].astype(str).str[0:-4]


查看完整回答
反对 回复 2022-12-06
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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 Network

0  12/25/2011     12 PM  BOS   NY     TNT

1  12/25/2011   2:30 PM  MIA  DAL     ABC

2  12/25/2011      5 PM  CHI  LAL     ABC

3  12/25/2011      8 PM  ORL  OKC    ESPN

4  12/25/2011  10:30 PM  LAC   GS    ESPN


查看完整回答
反对 回复 2022-12-06
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

不要在 ' 处拆分 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 pd

import numpy as np


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(expand=True)[[0,3]]   



# Final dataframe with desired columns

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


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


print(df)


查看完整回答
反对 回复 2022-12-06
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以使用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 Network

0  12/25/2011     12 PM  BOS   NY     TNT

1  12/25/2011   2:30 PM  MIA  DAL     ABC

2  12/25/2011      5 PM  CHI  LAL     ABC

3  12/25/2011      8 PM  ORL  OKC    ESPN

4  12/25/2011  10:30 PM  LAC   GS    ESPN


查看完整回答
反对 回复 2022-12-06
  • 4 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信