如何用 Python 处理和操作 CSV 文件?

news2024/11/14 3:37:39

CSV(Comma-Separated Values)文件是一种常见的数据存储格式,广泛用于数据交换和轻量级数据存储。CSV文件以纯文本格式存储表格数据,每一行代表一条记录,字段之间用逗号(或其他分隔符)分隔。Python提供了多种方法来处理和操作CSV文件,常用的库包括内置的csv库和第三方库如pandas

1. Python的csv

Python内置的csv库是处理CSV文件的标准库,提供了基本的读写功能。以下是csv库的主要功能和使用示例。

1.1 读取CSV文件

读取CSV文件是数据处理的第一步。csv库提供了csv.reader函数,它将CSV文件解析为行的迭代器。每一行数据都会被解析为一个列表,其中的元素对应CSV文件中的字段。

示例:

import csv

# 打开CSV文件
with open('data.csv', mode='r', newline='', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

在这个例子中,csv.reader将文件逐行读取,并将每行数据作为一个列表返回。newline=''参数用于避免在Windows系统上出现多余的空行,encoding='utf-8'保证了对多语言字符集的支持。

1.2 写入CSV文件

csv库的csv.writer函数可以将数据写入CSV文件。它接受一个文件对象,并提供了writerowwriterows方法来写入单行或多行数据。

示例:

import csv

data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# 打开CSV文件
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(data)

在这个例子中,writer.writerows(data)方法将一个包含多行数据的列表写入CSV文件。writerow方法则可以写入单行数据。

1.3 使用字典操作CSV文件

除了列表形式的读写,csv库还支持使用字典(dict)形式操作CSV数据。这种方式非常适合表头固定且需要按字段名操作数据的场景。

示例:

import csv

# 读取CSV文件
with open('data.csv', mode='r', newline='', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row['Name'], row['Age'])
        
# 写入CSV文件
fieldnames = ['Name', 'Age', 'City']
data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

在读操作中,DictReader将每行数据解析为一个字典,键为表头,值为相应的字段值。在写操作中,DictWriter要求提供一个fieldnames参数,用于指定CSV文件的表头,并使用writeheader方法写入表头。

2. 使用Pandas库操作CSV文件

pandas是Python中的一个强大的数据处理库,它提供了更加高级和灵活的CSV文件操作功能,尤其适合数据分析和数据科学领域。

2.1 读取CSV文件

pandas提供了read_csv函数来读取CSV文件,并将其加载为一个DataFrame对象。DataFrame是一种数据结构,类似于电子表格,它有行和列,并支持各种数据操作。

示例:

import pandas as pd

df = pd.read_csv('data.csv')
print(df.head())

read_csv函数自动处理了数据类型推断、缺失值等问题,还支持多种选项,如指定分隔符、解析日期、选择特定列等。

2.2 写入CSV文件

写入CSV文件同样非常简单。pandas提供了DataFrame.to_csv方法,将DataFrame导出为CSV文件。

示例:

df.to_csv('output.csv', index=False)

这里使用了index=False参数来避免将行索引写入文件。to_csv方法还有许多其他参数,如指定分隔符、处理缺失值等。

2.3 数据处理与操作

pandas的强大之处在于其数据操作功能。常见的操作包括数据过滤、分组、汇总、合并等。

示例:

# 过滤数据
filtered_df = df[df['Age'] > 25]

# 分组汇总
grouped = df.groupby('City')['Age'].mean()

# 合并数据
other_df = pd.read_csv('other_data.csv')
merged_df = pd.merge(df, other_df, on='Name')

这些操作通过链式调用可以方便地组合在一起,形成强大的数据处理管道。

3. 处理大数据和高效读写

当处理大文件或大数据集时,效率成为一个重要问题。以下是一些提高CSV文件处理效率的方法:

3.1 分块读取

pandasread_csv函数支持分块读取文件。通过指定chunksize参数,可以一次读取文件的一部分。

示例:

chunk_size = 10000
for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
    process(chunk)  # 自定义的处理函数

分块读取可以避免内存不足的问题,适合处理大型文件。

3.2 使用Dask库

Dask是一个并行计算库,它可以处理大于内存的数据集。Dask的DataFrame API与pandas类似,但支持并行操作和分布式计算。

示例:

import dask.dataframe as dd

ddf = dd.read_csv('large_data.csv')
result = ddf.groupby('City').Age.mean().compute()

在Dask中,操作是惰性执行的,只有调用compute时才会真正计算结果。

3.3 矢量化操作

在处理大量数据时,尽量避免使用循环而使用矢量化操作。pandasnumpy都支持矢量化,这能够显著提高处理速度。

示例:

df['New_Column'] = df['Age'] * 2

这种操作比遍历每行数据更高效。

4. 处理异常和错误

在实际应用中,CSV文件可能会包含异常数据或错误,处理这些情况对于保证数据质量非常重要。

4.1 处理缺失值

缺失值是数据处理中常见的问题。pandas提供了isnullfillna方法来检测和处理缺失值。

示例:

# 检查缺失值
missing_data = df.isnull().sum()

# 填充缺失值
df.fillna({'Age': df['Age'].mean(), 'City': 'Unknown'}, inplace=True)
4.2 处理数据类型问题

有时CSV文件中的数据类型不匹配,可能导致数据处理时出错。可以使用pandasastype方法进行数据类型转换。

示例:

df['Age'] = df['Age'].astype(int)

CSV文件是数据存储和交换中的基本格式之一。Python提供了多种处理CSV文件的方法,从基础的csv库到功能强大的pandas库,再到支持大数据处理的Dask库。选择合适的方法取决于具体的应用场景和数据规模。在处理数据时,注意数据的质量和效率问题,采用合理的数据清理和优化方法,能够有效提升数据处理的质量和速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(5):树和二叉树

1 树的定义 1.1 树的基本概念 分支可以称为边,结点可以用于存放数据结构。 除了根节点,其他节点只有一个前驱!!!! 互不相交也就是 只有一个前驱结点! 树应用的很广的 1.2 结点之间的关系 直接…

微服务实践和总结

H5原生组件web Component Web Component 是一种用于构建可复用用户界面组件的技术&#xff0c;开发者可以创建自定义的 HTML 标签&#xff0c;并将其封装为包含逻辑和样式的独立组件&#xff0c;从而在任何 Web 应用中重复使用。 <!DOCTYPE html> <html><head…

Python | Leetcode Python题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution:def moveZeroes(self, nums: List[int]) -> None:n len(nums)left right 0while right < n:if nums[right] ! 0:nums[left], nums[right] nums[right], nums[left]left 1right 1

springboot游戏化教育平台-计算机毕业设计源码92424

游戏化教育平台设计与实现 摘 要 游戏化教育平台是一种融合了游戏元素和教育内容的创新型教育工具&#xff0c;旨在提升学习者的学习兴趣和参与度。本论文基于SpringBoot框架&#xff0c;设计并实现了一款游戏化教育平台。该平台包括用户和管理员两大功能模块。对于用户功能而…

Linux开启coredump

在Linux系统中&#xff0c;C/C程序崩溃是常见的问题之一。Coredump是指当一个程序崩溃时&#xff0c;系统把程序运行时的内存数据以二进制文件的形式保存下来&#xff0c;以便程序开发者进行崩溃分析。本文将介绍如何开启并配置Coredump 1、查看并配置coredump 在Linux系统中…

mac M1安装Roop教程及所遇到的问题

1.安装miniconda&#xff0c;下载地址&#xff1a; 按 Python 版本划分的最新 Miniconda 安装程序链接&#xff1a;https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 下载后直接默认安装即可。 我用的是&#xff1a;Python3.10对应的Miniconda 2.下载…

在 ArchLinux 上编译运行 axmol 引擎

本文将在 Windows 10 上安装 Arch WSL 中编译 axmol 请确保 WSL2 已正确安装 1. 在微软应用商店安装 ArchLinux 2. 打开 Arch&#xff0c;按照提示输入用户名和密码&#xff0c;尽量简单 3. 配置清华源&#xff0c;速度快的起飞&#xff0c;否则&#xff0c;各种包会安装失败…

C++必修:模拟实现STL之string

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 为了让我们更加深入理解string&#xff0c;接下来我们将模拟实现一个简易版的stri…

力扣高频SQL 50题(基础版)第十七题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十七题1075. 项目员工 I题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第十七题 1075. 项目员工 I 题目说明 项目表 Project&#xff1a; ----------------…

四、GD32 MCU 常见外设介绍 (2) GPIO 模块介绍

2.GPIO 模块介绍 GPIO的全称为通用输入输出口&#xff0c;是很多外设能够正常工作的必要条件。除了一些特定功能的引脚(如电源脚)外&#xff0c;MCU上其他的引脚都可以当做GPIO来使用。本章&#xff0c;我们将对GPIO进行简单介绍&#xff0c;并通过一个“流水灯”的实验来熟悉…

力扣刷题-图论-岛屿类问题-集合实现(c++实现)

我的老师&#xff1a;力扣链接这道题题解中最高赞的回答nettee&#xff0c;从这篇题解中我学到了dfs框架以及解决思路&#xff0c;并独立完成了该题解里的几道习题本人刷题的习惯是学会一个板子&#xff0c;然后之后的同类题都机械的用这个板子去做&#xff0c;最好不做创新&am…

广州某展厅门牌创新案例:1*2 OLED柔性屏的精致应用

在广州这座繁华都市的心脏地带&#xff0c;一座现代感十足的展厅悄然矗立&#xff0c;其独特的门牌设计成为了过往行人目光的焦点。这座展厅的门牌采用了前沿的1*2 OLED柔性屏技术&#xff0c;不仅展现了科技与艺术的完美融合&#xff0c;更彰显了展厅的高端定位与创新精神。 项…

容器 string 的模拟实现

容器 string 的模拟实现 开篇解释代码实现&#xff1a;myString.h 头文件myString.cpp 实现文件 模拟实现 string 能对 STL 有更深刻的认识&#xff0c;底层了解越丰富&#xff0c;使用起来越顺手 接下来我会以 .h 头文件以及其 .cpp 的实现文件展示其大致模拟&#xff0c;这只…

【代码】Python3|Scrapy框架初探(汽车之家大连市二手车车辆数据爬取、清洗与可视化)

本篇主要是整个项目的介绍&#xff0c;没提到太多琐碎的技术细节&#xff0c;以后有空的话会整理一下 Scrapy 和原生爬虫的差异&#xff0c;还有它坑人的一些地方&#xff0c;单发出来。 开源地址&#xff1a;https://github.com/shandianchengzi/car_home_spider 使用说明&a…

学习日记:数据类型2

目录 1.转义字符 2.隐式类型转换 2.1 强制类型转换 2.2 不同类型间赋值 3.运算符 表达式 3.1 算术运算符 3.2 算术运算优先级 3.3 赋值运算 3.3.1 不同类型间混合赋值 3.4 逗号运算 4.生成随机数 5. 每日一练 1.转义字符 \n 表示换行 \t …

Vue3可媲美Element Plus Tree组件实战之移除节点

Element Plus Tree自定义节点内容示例中介绍了移除节点的用法&#xff0c;个人觉得作为提供给用户API&#xff0c;应该遵循迪米特法则&#xff0c;把功能实现的细节封装在组件内部&#xff0c;而提供给用户最简单的操作方式&#xff0c;同时在此基础上支持用户的扩展。 因此&a…

ITK-中值滤波

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 中值滤波原理 中值滤波是一种常用的非线性滤波技术&#xff0c;用于去除图像中的噪声&#xff0c;特别是椒盐噪声和脉冲噪声。它…

MM 7 -采购- 询报价

思维导图 说明 sap提供了 询价 报价和比价的功能。 不建议在sap管理。一般引导不在sap管理。 流程&#xff1a; 操作 询价 ME41 报价ME47 比价ME49 拒绝 对于不符合条件的报价进行拒绝 生成信息记录 后台表 Ekko ekpo 。采购凭证类别&#xff1a;A

csa笔记6-网络管理命令

nmcli命令 字符终端&#xff0c;可以立即生效且重启系统后配置也不会丢失 nmtui命令 可视终端&#xff0c;立即生效&#xff0c;重启有效 network.service 管理网络 RHEL 7 以前&#xff1a;使用network.service管理网络 RHEL 7&#xff1a;使用network.service和Netwo…

Docker(十一)-Docker运行nginx1.10容器实例

1.下载镜像 docker pull nginx:1.102.直接启动实例(目的&#xff1a;复制出配置文件) 2.1启动实例 docker run -d -p 80:80 --namenginx1.10 nginx:1.102.2将容器内文件拷贝到本地目录 docker cp nginx1.10:/etc/nginx /software/nginx/将/software/nginx/nginx目录改为/so…