一文带你搞懂Python如何解析CSV文件

 更新时间:2026年03月31日 09:33:15   作者:mabley  
CSV(Comma-Separated Values)是一种以纯文本格式存储表格数据的文件格式,本文主要为大家详细介绍了如何使用Python解析CSV文件,有需要的小伙伴可以了解下

一、CSV文件

逗号分隔值(Comma-Separated Values,CSV)是一种以纯文本格式存储表格数据的文件格式。每一行代表一条数据记录,每条记录由一个或多个字段组成。字段分隔符默认使用逗号分隔,实际使用中也可以采用其他字符作为分隔符,如分号 ;或制表符 \t等。

1. 基本结构

  • 每一行:表示一条数据记录。
  • 字段:记录中的每个数据项,用字段分隔符分隔。
  • 字段值:文本或数字,可以包含特殊字符。

姓名,年龄,城市
张三,30,北京
李四,25,上海

2. 特殊情况

字段中若包含回车换行符、双引号或者逗号,该字段需要用双引号括起来。如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。

"aaa","b 
bb","ccc" 
"aaa","b""bb","ccc"

二、Python解析

1. 数据文件(data.csv)

id,name,age,city
1,Alice,30,New York
2,Bob,25,Los Angeles
3,Charlie,35,Chicago
4,David,40,Houston

2. 原生python

导入csv包之后对文件进行解析。

import csv

# 1. 读取 CSV 文件
with open('data.csv', mode='r', newline='', encoding='utf-8') as file:
    reader = csv.reader(file)
    data = list(reader)

# 2. 取行/列数据
# 取第二行数据
print("\n第二行数据:", data[1])

# 取第三列数据
column_index = 2
column_data = [row[column_index] for row in data]
print("\n第三列数据:", column_data)

# 3. 遍历数据
print("\n遍历数据:")
for row in data:
    print(row)

# 4. 批量修改某行/列数据
# 批量修改第二行数据
new_row_data = ['5', 'Eva', '28', 'San Francisco']
data[1] = new_row_data

# 批量修改第三列数据
new_column_data = ['31', '26', '36', '41']
for i, row in enumerate(data[1:], start=1):  # Skip header row
    row[column_index] = new_column_data[i - 1]

# 5. 修改某个具体的值
# 修改第一行第二列的具体值
data[0][1] = 'Alicia'

# 6. 增加某行/列数据
# 增加新行
new_row = ['5', 'Eva', '28', 'San Francisco']
data.append(new_row)

# 增加新列
new_column_data = ['USA'] * len(data)  # New column data
for row, value in zip(data, new_column_data):
    row.append(value)

# 7. 删除某行/列数据
# 删除第二行
del data[1]

# 删除第三列
for row in data:
    del row[2]

# 8. 存储数据
# 保存修改后的数据
with open(file_path, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(data)

print("\n修改后的数据:")
for row in data:
    print(row)

3. pandas

导入pandas包之后对文件进行解析。

import pandas as pd
# 1. 读取 CSV 文件
df = pd.read_csv('data.csv')

# 2. 取行/列数据
# 取第一行数据
print("\n第一行数据:")
print(df.iloc[0])

# 取 'name' 列的数据
print("\n'name' 列的数据:")
print(df['name'])

# 3. 遍历数据
print("\n遍历数据:")
for index, row in df.iterrows():
    print(f"ID: {row['id']}, Name: {row['name']}, Age: {row['age']}, City: {row['city']}")

# 4. 批量修改某行/列数据
# 修改 'age' 列中所有人的年龄,加5岁
df['age'] = df['age'] + 5

# 修改 'city' 列中 'New York' 的值为 'NYC'
df.loc[df['city'] == 'New York', 'city'] = 'NYC'

# 5. 修改某个具体的值
# 修改 ID 为 2 的人的 'age' 为 28
df.loc[df['id'] == 2, 'age'] = 28

# 删除 'city' 列
df = df.drop(columns=['city'])

# 6. 增加行/列,并填充数据
# 增加一列 'email' 并填充默认值 'unknown'
df['email'] = 'unknown'

# 增加一行数据
new_row = {'id': 5, 'name': 'Eve', 'age': 22, 'email': 'eve@example.com'}
df.loc[len(df)] = new_row

# 7. 删除某行/列数据
# 删除 ID 为 4 的行
df = df[df['id'] != 4]

# 删除 'city' 列
df = df.drop(columns=['city'])

# 8. 存储数据
df.to_csv('modified_data.csv', index=False)

print("\n修改后的数据:")
print(df)

to_csv函数详解:

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None,
                columns=None, header=True, index=True, index_label=None, mode='w',
                encoding=None, compression=None, quoting=None, quotechar='"',
                line_terminator='\n', chunksize=None, tupleize_cols=None, 
                date_format=None, doublequote=True,escapechar=None, decimal='.')

重要参数:

  • columns : 列名
  • sep : 字段分隔符,默认为 ,
  • index : 是否保存索引,默认为 True
  • header : 是否保存列名,默认为 True
  • na_rep : 替换空数据的字符串,默认为 ‘’
  • float_format : 设置浮点数的格式(保留位数)
  • path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json

为了快速上手,对于CSV文件数据取出来之后的数据操作从各个方面给了简单的demo。以取列值和行值为例(特别是pandas),根据数据情况有很多种方式,其中不乏简单便捷的,可以找具体的教程进行学习。

到此这篇关于一文带你搞懂Python如何解析CSV文件的文章就介绍到这了,更多相关Python解析CSV文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用flask sqlalchemy实现分页效果

    Python利用flask sqlalchemy实现分页效果

    这篇文章主要为大家详细介绍了利用flask sqlalchemy实现分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Python通过朴素贝叶斯和LSTM分别实现新闻文本分类

    Python通过朴素贝叶斯和LSTM分别实现新闻文本分类

    朴素贝叶斯法(Naive Bayes model)是基于贝叶斯定理与特征条件独立假设的分类方法。LSTM则是一种时间循环神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。本文将通过这两个方法分别实现新闻文本分类,需要的可以参考一下
    2021-12-12
  • Python无损音乐搜索引擎实现代码

    Python无损音乐搜索引擎实现代码

    这篇文章主要介绍了Python无损音乐搜索引擎的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python实现GPU加速图像处理的代码详解

    Python实现GPU加速图像处理的代码详解

    这篇文章主要为大家详细介绍了Python实现GPU加速图像处理的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • 解决matplotlib库show()方法不显示图片的问题

    解决matplotlib库show()方法不显示图片的问题

    今天小编就为大家分享一篇解决matplotlib库show()方法不显示图片的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python学习——内置函数、数据结构、标准库的技巧(推荐)

    python学习——内置函数、数据结构、标准库的技巧(推荐)

    这篇文章主要介绍了python学习——内置函数、数据结构、标准库的技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python线程信号量semaphore使用解析

    python线程信号量semaphore使用解析

    这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • pandas索引与赋值操作、排序以及Series排序和DataFrame排序方式

    pandas索引与赋值操作、排序以及Series排序和DataFrame排序方式

    这篇文章主要介绍了pandas索引与赋值操作、排序以及Series排序和DataFrame排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 68行Python代码实现带难度升级的贪吃蛇

    68行Python代码实现带难度升级的贪吃蛇

    本文主要介绍了Python代码实现带难度升级的贪吃蛇,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文教你实现Python重试装饰器

    一文教你实现Python重试装饰器

    在写业务代码时候,有许多场景需要重试某块业务逻辑,例如网络请求、购物下单等,希望发生异常的时候多重试几次。本文分享如何利用Python 的装饰器来进行面向切面(AOP)的方式实现自动重试器,希望对大家有所帮助
    2023-02-02

最新评论