You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页爬取后移除DataFrame中\n\t字符的方法求助

解决DataFrame中无法移除\n和\t的问题

核心问题分析

  1. replace未生效的关键原因
    Pandas的replace()默认返回新的DataFrame,不会修改原数据。你之前的代码只调用了方法但没接收返回值,也没加inplace=True,所以原数据完全没变化。

  2. 正则表达式格式错误
    你写的to_replace=[{'\\n', '\\t'}]是错误写法,匹配换行、制表符直接用正则模式r'[\n\t]'即可。

  3. 代码冗余与结构问题

    • 重复调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:03:21