如何使用Pandas清理并读取含有冗余文本的CSV文件

来源:个人站长作者:长沙SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何使用Pandas清理并读取含有冗余文本的CSV文件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用Pandas清理并读取含有冗余文本的CSV文件》有用,将其分享出去将是对创作者最好的鼓励。

在实际数据处理的场景中,很多CSV文件并非纯粹的结构化数据,可能会在文件开头、结尾或者行内存在冗余的说明文本、空行、注释内容等,直接使用Pandas的read_csv方法读取时会出现解析错误或者数据异常的情况,需要针对性地进行清理后再读取。

如何使用Pandas清理并读取含有冗余文本的CSV文件

常见冗余文本场景分类

首先需要明确CSV文件中冗余文本的常见存在形式,才能针对性选择处理方式,常见的场景主要有以下几类:

  • 文件开头存在多行无关说明文本,之后才是表头和数据行
  • 文件结尾存在多行总结性或者注释类文本
  • 数据行内部存在不符合CSV格式的特殊字符或者多余空格
  • 文件存在大量空行,分散在表头和数据行之间

读取前跳过开头冗余文本

如果冗余文本集中在文件开头,且行数固定,可以直接使用skiprows参数跳过指定行数。假设CSV文件前3行是无用的说明文本,第4行才是表头,示例代码如下:

import pandas as pd

# 跳过前3行冗余文本,第4行作为表头
df = pd.read_csv("data.csv", skiprows=3)
print(df.head())

如果冗余文本的行数不固定,但是存在固定的标识字符,比如所有冗余行都以#开头,可以使用comment参数指定注释字符,Pandas会自动跳过所有以该字符开头的行:

import pandas as pd

# 跳过所有以#开头的冗余行
df = pd.read_csv("data.csv", comment="#")
print(df.head())

处理结尾冗余文本

对于文件结尾的冗余文本,可以先读取所有行,再筛选有效数据行。可以通过判断每行的列数是否符合预期来过滤无效行,示例代码如下:

import pandas as pd

# 先读取所有行,不设置表头
with open("data.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()

# 假设有效数据每行有5列,过滤列数不符合的行
valid_lines = []
for line in lines:
    # 去掉换行符后分割
    parts = line.strip().split(",")
    if len(parts) == 5:
        valid_lines.append(line)

# 将有效行转为字符串流再读取
from io import StringIO
df = pd.read_csv(StringIO("".join(valid_lines)))
print(df.head())

清理行内冗余文本

如果冗余文本存在于数据行的字段内部,比如字段两端有多余空格、特殊符号,可以在读取后使用Pandas的字符串处理方法进行清理,示例代码如下:

import pandas as pd

# 读取CSV文件
df = pd.read_csv("data.csv", skiprows=2)

# 去除所有字符串类型字段两端的空格
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

# 去除字段中的特殊符号,比如多余的*
df = df.replace(r"*", "", regex=True)
print(df.head())

完整处理流程示例

结合上述几种场景,下面是一个完整的处理包含多种冗余文本的CSV文件的示例:

import pandas as pd
from io import StringIO

def clean_csv(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        lines = f.readlines()
    
    valid_lines = []
    for line in lines:
        # 跳过以#开头的行和空行
        if line.strip().startswith("#") or not line.strip():
            continue
        # 过滤列数不符合的行,假设有效数据有4列
        if len(line.strip().split(",")) == 4:
            valid_lines.append(line)
    
    # 读取有效数据,第一行作为表头
    df = pd.read_csv(StringIO("".join(valid_lines)), header=0)
    # 清理字段内冗余空格
    df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
    return df

if __name__ == "__main__":
    result_df = clean_csv("test.csv")
    print(result_df)
    print(result_df.info())

注意事项

在处理CSV文件时,需要注意文件的编码格式,如果读取时出现乱码,可以尝试指定encoding参数为gbk或者utf-8-sig。另外如果CSV文件的分割符不是逗号,需要通过sep参数指定对应的分隔符,避免解析错误。

PandasCSV文件处理数据清洗冗余文本清理修改时间:2026-06-26 09:03:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。