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

如何用NumPy/Pandas修复bballreference导入的单列CSV数据

修复bballreference导出CSV的列分隔问题(Pandas)

嘿,我碰到过类似的情况!从bballreference导出的CSV有时候会因为网站的导出逻辑出现这种格式问题——所有数据挤在同一行,根本没法用。别担心,用Pandas就能轻松搞定,给你两种简单的修复方法:

方法一:先清理内容再读取(直观易懂)

这个方法先把格式混乱的内容转换成标准CSV,再用Pandas读取,新手也能快速理解:

import pandas as pd
from io import StringIO

# 替换成你的CSV文件路径
file_path = "your_bball_data.csv"

# 读取原始文件内容
with open(file_path, "r") as f:
    raw_content = f.read()

# 把被双引号包裹的每一行拆出来,清理掉多余的引号和空格
clean_rows = [block.strip() for block in raw_content.split('"') if block.strip()]
# 把清理后的行拼接成标准CSV格式
clean_csv = "\n".join(clean_rows)

# 读取处理后的CSV,设置header=[0,1]来处理bballreference的多级表头(第一行是分组,第二行是具体列名)
df = pd.read_csv(StringIO(clean_csv), header=[0, 1])

# 看看处理后的结果
print(df.head())

方法二:直接用Pandas参数处理(更简洁)

如果你不想手动处理文本,也可以通过调整read_csv的参数直接读取,一步到位:

import pandas as pd

df = pd.read_csv(
    "your_bball_data.csv",
    sep='"',          # 按双引号分割内容
    skipinitialspace=True,  # 跳过引号后面的空格
    header=None       # 先不自动识别表头,后续手动处理
).dropna(axis=1, how='all')  # 删除全是空值的列

# 过滤掉空行,只保留有效数据行
df = df[df[1].notna()]

# 把每行的逗号分隔内容拆成单独的列
df = df[1].str.split(',', expand=True)

# 设置多级表头:第一行是分组(Totals/Shooting/Per Game),第二行是具体列名
df.columns = pd.MultiIndex.from_arrays([df.iloc[0], df.iloc[1]])

# 去掉表头行,重置索引
df = df.drop([0, 1]).reset_index(drop=True)

# 可选:把数值型列转换成正确的数据类型(默认是字符串)
df = df.apply(pd.to_numeric, errors='ignore')

# 查看结果
print(df.head())

为啥会出现这个问题?

从你提供的CSV内容来看,这个文件的格式有点奇葩:每一行原本的数据都被双引号包裹,行与行之间用空格分隔,而不是标准的“每行一条记录、逗号分隔列”的CSV格式。这应该是bballreference导出时的小bug,导致Pandas默认的读取规则没法正确识别行和列的分隔符,所以才会把所有内容挤到同一行里。

两种方法都能解决问题,选你觉得顺手的就行~

内容的提问来源于stack exchange,提问作者NimbleTortoise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:38:46