导读:本期聚焦于小菜鸟创作的《python怎么读取csv文件?超详细的数据处理基础教程》,敬请观看详情。csv文件里的数据读不进来,中文显示成乱码,分隔符不认账,这些都是python初学者最常踩的坑。本文系统讲解python读取csv文件的几种主流方式,包括标准库csv模块的基本用法、pandas库的read_csv函数详解,以及大文件分块读取的实用技巧。文中还会针对编码问题、表头处理、缺失值清洗等高频问题给出直接可用的代码方案,帮助你快速掌握python数据处理的第一步。

做数据分析或自动化办公,绕不开的第一个环节就是读取csv文件。csv本质上是纯文本格式的表格数据,每一行代表一条记录,字段之间用逗号分隔。python处理这类文件有两条路:一是标准库自带的csv模块,无需安装任何依赖;二是第三方库pandas,功能更强大,也是数据分析的事实标准。这篇文章会把两种方法都讲透,并补充编码、大文件、缺失值这些实战中必然会遇到的细节。

python怎么读取csv文件?超详细的数据处理基础教程

用标准库csv模块读取文件

csv模块是python内置的,打开解释器就能用,适合不想引入额外依赖的场景,比如写一些轻量脚本或者部署环境受限的项目。它的核心对象有两个:reader用于按行读取列表,DictReader用于把每一行转成字典,字典的键就是表头。两种方式的区别在于后续取数的方式,列表按下标取,字典按键取,后者写出来的代码可读性明显更好。

import csv

# 基本读取:每行是一个列表
with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    header = next(reader)  # 先读表头
    for row in reader:
        print(row[0], row[1])

# 用DictReader读取:每行是一个字典
with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['姓名'], row['年龄'])

这里有几个容易出错的地方需要提醒。第一,open时务必带上encoding参数,不指定的话python会使用系统默认编码,在Windows上通常是gbk,遇到utf-8编码的文件就会报UnicodeDecodeError。第二,如果文件是用制表符或其他符号分隔的,可以通过delimiter参数指定,例如csv.reader(f, delimiter='\t')。第三,with open的写法能保证文件在使用完后自动关闭,比手动调用close安全得多。

用pandas读取:read_csv参数详解

如果要做真正的数据处理,pandas几乎是必选项。安装命令为pip install pandas,装好之后用read_csv一行代码就能把文件读成DataFrame对象,后续可以方便地做筛选、聚合、统计。csv模块读进来的都是字符串,还得自己转换类型,而pandas会自动推断每列的数据类型,这一步就省了不少事。

import pandas as pd

# 最基础的用法
df = pd.read_csv('data.csv', encoding='utf-8')

# 常用参数组合
df = pd.read_csv(
    'data.csv',
    encoding='gbk',          # 指定编码,中文乱码时优先尝试gbk
    sep=',',                 # 分隔符,制表符文件用 sep='\t'
    header=0,                # 第0行作为表头,无表头文件用 header=None
    names=['姓名', '年龄'],  # 手动指定列名
    usecols=['姓名', '年龄'],# 只读取指定列,省内存
    nrows=1000               # 只读前1000行,快速预览大文件
)

print(df.head())      # 查看前5行
print(df.info())      # 查看列类型和缺失情况
print(df.describe())  # 数值列统计摘要

关于编码问题多说几句。Windows下用Excel另存出的csv通常是gbk编码,而Linux平台或数据库导出的多为utf-8。如果不确定文件编码,可以先用chardet库检测:chardet.detect(open('data.csv','rb').read())['encoding'],检测出结果后再传给read_csv的encoding参数,这个方法能解决绝大多数乱码问题。

表头处理也是高频需求。有些csv第一行不是表头而是数据,此时设header=None并配合names参数手动起列名;有些文件表头有冗余空格,可以加skipinitialspace=True。另外index_col参数可以把某一列设为行索引,parse_dates参数能把日期字符串直接解析成时间类型,这两个参数在时间序列分析里特别常用。

大文件分块读取与数据清洗

当csv文件大到几个GB时,一次性读入内存会导致程序直接崩掉。pandas提供了chunksize参数来分块读取,每次只加载固定行数进内存,处理完一块再读下一块。这种模式特别适合统计类任务,比如累加求和、计数,或者从海量数据里筛出符合条件的少量记录。

import pandas as pd

# 分块读取,每次读10万行
chunk_iter = pd.read_csv('big_data.csv', chunksize=100000)

total = 0
result_list = []
for chunk in chunk_iter:
    # 每一块都做相同的过滤逻辑
    filtered = chunk[chunk['销售额'] > 1000]
    result_list.append(filtered)
    total += chunk['销售额'].sum()

# 合并所有符合条件的记录
final_df = pd.concat(result_list, ignore_index=True)
print('销售总额:', total)
print('符合条件记录数:', len(final_df))

读取只是第一步,实际数据往往并不干净。缺失值是最常见的问题,pandas里用df.isnull().sum()可以快速查看每列缺失数量。处理方式看业务需求:数值列可以用fillna(0)填充默认值,也可以用均值填充df['列名'].fillna(df['列名'].mean());如果缺失比例太高,干脆用dropna把整行丢掉。重复数据则用drop_duplicates()处理。

还有一个细节值得注意:如果某列混合了数字和文本,pandas会把整列推断为object类型(即字符串),此时可以用pd.to_numeric(df['列名'], errors='coerce')强制转换,无法转换的值会变成NaN而不是抛异常,这样代码更健壮。掌握读取、清洗这两步,python数据处理的入门就算真正完成了,后面的分析和可视化都建立在这个基础之上。

python读取csvcsv文件处理pandas数据处理修改时间:2026-09-03 11:31:28

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