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

如何将行分隔错误的CSV数据正确解析并存入pandas DataFrame

解决波士顿数据集行拆分导致的pandas解析问题

问题根源

该数据集的部分完整数据行(包含14个特征)被错误拆分为两行存储,直接用pd.read_csv按行读取时,拆分后的行因列数不足14会被填充NaN,导致无法匹配预设列名。


方法一:预处理文本合并拆分行(最稳妥)

先读取原始文本,将被拆分的不完整行合并为完整的14列数据行,再导入pandas:

import pandas as pd
from io import StringIO

# 读取原始数据文件,跳过前21行说明文字
with open("boston.data", "r") as f:
    lines = f.readlines()[21:]

processed_lines = []
current_line = ""

for line in lines:
    stripped = line.strip()
    if not stripped:
        continue
    # 拼接当前行到临时变量
    current_line += f" {stripped}"
    # 统计当前已拼接的数值数量
    value_count = len(current_line.strip().split())
    # 达到14个数值则为完整行,存入列表并重置临时变量
    if value_count == 14:
        processed_lines.append(current_line.strip())
        current_line = ""

# 将处理后的文本转为可读取对象,生成DataFrame
data_stream = StringIO("\n".join(processed_lines))
df = pd.read_csv(
    data_stream,
    sep=r"\s+",
    names=["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"]
)

# 验证结果
print(df.head())
print(f"NaN值数量:{df.isna().sum().sum()}")

方法二:固定宽度格式读取(备选)

如果数据集的拆分是严格按固定宽度进行的,可直接用pd.read_fwf读取,无需预处理:

import pandas as pd

df = pd.read_fwf(
    "boston.data",
    skiprows=21,
    names=["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"]
)

注意:若数据行的拆分宽度不统一,此方法可能失效,优先选择方法一。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:37:18