网页爬取后移除DataFrame中\n\t字符的方法求助
解决DataFrame中无法移除\n和\t的问题
核心问题分析
replace未生效的关键原因
Pandas的replace()默认返回新的DataFrame,不会修改原数据。你之前的代码只调用了方法但没接收返回值,也没加inplace=True,所以原数据完全没变化。正则表达式格式错误
你写的to_replace=[{'\\n', '\\t'}]是错误写法,匹配换行、制表符直接用正则模式r'[\n\t]'即可。代码冗余与结构问题
- 重复调用
soup.findAll(class_='pbpinning'),完全没必要; - 用集合
{i.text.strip()}转数组会破坏数据结构,改用列表更合理; - 循环内反复创建DataFrame效率低,建议先收集所有数据再统一处理。
- 重复调用
修改后的完整代码
# imports from bs4 import BeautifulSoup import requests import pandas as pd import numpy as np # 修正numpy的别名(原代码写的py是错误的) import csv # 获取单场比赛数据(当前仅爬取gameID=598903的场次) gameID = 598903 website = f"https://baseball.pointstreak.com/boxscore.html?gameid={gameID}" result = requests.get(website) content = result.text # 解析HTML soup = BeautifulSoup(content, 'lxml') # 提取每局的playbyplay数据 innings = soup.find_all(class_='pbpinning') play_data = [] for inning in innings: # 提取文本并暂存到列表 clean_text = inning.text.strip() play_data.append({"Play by Play": clean_text}) # 统一生成DataFrame pbpdf = pd.DataFrame(play_data) # 清理\n和\t字符(两种方法任选其一) # 方法1:正则批量替换 pbpdf["Play by Play"] = pbpdf["Play by Play"].replace(r'[\n\t]', '', regex=True) # 方法2:逐次替换(更直观) # pbpdf["Play by Play"] = pbpdf["Play by Play"].str.replace('\n', '').str.replace('\t', '') print(pbpdf)
关键修改说明
- 修正了numpy的导入别名(原代码
import numpy as py是错误的,标准别名是np); - 移除冗余的重复查找操作,优化数据收集逻辑;
- 确保
replace修改生效:要么接收返回值重新赋值,要么使用inplace=True(更推荐显式赋值,避免隐式修改原数据); - 提供两种清理字符的方式,根据习惯选择即可。
内容的提问来源于stack exchange,提问作者Riley Bennett
相关产品推荐
相关产品推荐

