python处理csv文件

news2024/11/17 22:43:59

如何使用python处理csv文件

素材准备

​ csv⽂件其实就是⽂本⽂件,遵循了⼀定的格式,常⻅的csv⽂件⼀般是⽤逗号来隔开列,⽤换⾏符隔开不同的⾏,注意这⾥的符号都是英⽂符号。我们可以直接⽤open函数来打开csv⽂件;

本实验使用csv文件(example.csv)分享:https://osswangting.oss-cn-shanghai.aliyuncs.com/python/example.csv

例如我们用文本编辑器打开csv文件时看到的内容一般为逗号分隔的纯文本文件:

日期,订单号,产品ID,产品类目,数量(斤),单价,折扣,销售额
2020/4/1,2020040101,PID_0019,芒果,3,7.3,0.82,17.92
2020/4/1,2020040101,PID_0011,葡萄,1,8,0.64,5.12
2020/4/1,2020040101,PID_0004,香蕉,4,6.9,0.82,22.65
2020/4/1,2020040101,PID_0018,荔枝,1,3.4,0.73,2.47
2020/4/1,2020040102,PID_0019,芒果,2,3.6,0.64,4.6
2020/4/1,2020040102,PID_0001,荔枝,3,4.7,0.62,8.69
2020/4/1,2020040102,PID_0016,葡萄,2,4.6,0.84,7.65
2020/4/1,2020040102,PID_0018,荔枝,2,5.1,0.81,8.29
2020/4/1,2020040103,PID_0012,荔枝,4,11,0.92,40.6
2020/4/1,2020040103,PID_0011,葡萄,2,9.1,0.85,15.39

最基本方式打开csv

使用python代码打开一个csv文件基本形式:

代码:

with open('./example.csv', 'r') as f:
    for line in f.readlines():
        print(line)

提示报错:

Traceback (most recent call last):
File “D:/20220728/file_ops.py”, line 2, in
for line in f.readlines():
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xb7 in position 15: illegal multibyte sequence

以只读方式打开时除了指定模式为"r"之外还有指定在python中以要打开的文件的编码相同的方式打开,也就是让python不以默认的 gbk方式打开,而是以我们指定的 utf-8 打开( encoding=‘utf-8’ )

如果要保存的内容有中文,而且之后需要用Excel打开文件,那么需要选用utf-8-sig编码。如果使用utf-8编码,会导致使用Excel查看文件时中文乱码

代码迭代:

with open('./example.csv', 'r', encoding='utf-8') as f:
    for line in f.readlines():
        print(line)

此时python代码成功将csv文件内容读取并输出到控制台

注意:文本内容都是以逗号来区分字段,但如果出现一个字段中有逗号符时,那么则会出现错列的情况,为了避免错列的情况发生,我们则需要在同一字段或同一列内容出现逗号时,用引号引起来规避这样的问题发生。

例如文中的:( 葡萄 ),如果文件中内容是( 葡,萄 ),那么( 葡,萄 )默认会别识别成2列,所以需要修改成( “葡,萄” ),则才可以识别成一列内容。

使用csv模块读取文件

Python库:csv
Python中集成了专用于处理csv文件的库,名为:csv。

csv 库中有4个常用的对象:

  • csv.reader:以列表的形式返回读取的数据。
  • csv.writer:以列表的形式写入数据。
  • csv.DictReader:以字典的形式返回读取的数据
  • csv.DictWriter:以字典的形式写入数据

读取方法1-代码:

import csv

with open('./example.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        for col in row:
            print(col, end="\t")
        print()

csv.reader(f)

reader() 按⾏读取,每⼀⾏是⼀个列表,reader是列表对象

一个元素为:[‘日期’, ‘订单号’, ‘产品ID’, ‘产品类目’, ‘数量(斤)’, ‘单价’, ‘折扣’, ‘销售额’]

所以遍历去获取其中的每一个字段

这种方法有一个缺点是一行一行整行取,不够灵活

读取方法2-代码:

import csv

with open('./example.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['产品类目'], row['销售额'])

csv.DictReader(f)

字典对象

通过取key键来获取对应的值,key相当于字段名

使用csv模块写入文件

写入方法1-代码:

import csv
sales = (
    ("Peter", (78, 70, 65)),
    ("John", (88, 80, 85)),
    ("Tony", (90, 99, 95)),
    ("Henry", (80, 70, 55)),
    ("Mike", (95, 90, 95)),
)
with open('./sales.csv', 'w', newline="") as f:
    writer = csv.writer(f)
    writer.writerow(['name', 'Jan', 'Feb', 'Mar'])
    for name, qa in sales:
        writer.writerow([name, qa[0], qa[1], qa[2]])
        # writer.writerow([name, *qa]) 等同于上方

writerow()一次只能写入一行

如果使用writerows()一次可以写入多行

注意:, newline=""参数加入后,可以让表格数据行之间没有空白行,不加否则每行数据中间都会有一行空白行

写入方法2-代码:

import csv

sales = (
    ("Peter", (78, 70, 65)),
    ("John", (88, 80, 85)),
    ("Tony", (90, 99, 95)),
    ("Henry", (80, 70, 55)),
    ("Mike", (95, 90, 95)),
)

data = [{'name': name, 'amount': sum(qa)} for name, qa in sales]
with open('./sales2.csv', 'w', newline="") as f:
    fieldnames = ['name', 'amount']
    writer = csv.DictWriter(f, fieldnames)
    writer.writeheader()
    for row in data:
        writer.writerow(row)

读取csv文件(使用pandas模块)

代码:

import pandas as pd

data = pd.read_csv('./example.csv')
print(data)

csv文件内容去重(使用pandas模块)

pip install pandas

本实验使用csv文件(example.csv)分享:https://osswangting.oss-cn-shanghai.aliyuncs.com/python/example.csv

主要使用pandas模块中涉及的drop_duplicates()函数

参数说明
subset根据指定的列名进行去重,默认整个数据集
keep可选{‘first’, ‘last’, False},默认first,即默认保留第一次出现的重复值,并删去其他重复的数据,False是指删去所有重复数据。
inplace是否对数据集本身进行修改,默认False
import pandas as pd

df = pd.read_csv('./example.csv')
df1 = df.drop_duplicates(subset=['产品类目'], keep='last', inplace=False)
print(df)
print("----------")
print(df1)

代码中subset对应的值是列名,表示根据什么列来去重,可以多列去重
默认值为subset=None表示考虑所有列

keep='first’表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。

inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本

删除csv文件行与列(使用pandas模块)

原文件内容:

日期          订单号       产品ID     产品类目  数量(斤)    单价    折扣    销售额
0  2020/4/1  2020040101  PID_0019     芒果        3     7.3       0.82  17.92
1  2020/4/1  2020040101  PID_0011     葡萄        1     8.0       0.64   5.12
2  2020/4/1  2020040101  PID_0004     香蕉        4     6.9       0.82  22.65
3  2020/4/1  2020040101  PID_0018     荔枝        1     3.4       0.73   2.47
4  2020/4/1  2020040102  PID_0019     芒果        2     3.6       0.64   4.60
5  2020/4/1  2020040102  PID_0001     荔枝        3     4.7       0.62   8.69
6  2020/4/1  2020040102  PID_0016     葡萄        2     4.6       0.84   7.65
7  2020/4/1  2020040102  PID_0018     荔枝        2     5.1       0.81   8.29
8  2020/4/1  2020040103  PID_0012     荔枝        4    11.0       0.92  40.60
9  2020/4/1  2020040103  PID_0011     葡萄        2     9.1       0.85  15.39
  • 删除列
import pandas as pd

data = pd.read_csv('./example.csv')
data_new = data.drop(['日期', '订单号', '产品ID'], axis=1)
print(data_new)
  • 删除行
import pandas as pd

data = pd.read_csv('./example.csv')
data_new = data.drop([0, 1, 2, 3])
print(data_new)
  • 生成的文件写入新文件
import pandas as pd

data = pd.read_csv('./example.csv')
data_new = data.drop([0, 1, 2, 3, 4, 5, 6, 7])

data_new.to_csv("./example3.csv", index=0)
print(pd.read_csv('./example3.csv'))

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

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

相关文章

.net----数据库的访问ADO.NET、DataAdapter和DataSet

数据库的访问前言ADO.NET的概述ADO.NET数据源访问处理数据类库的两个组件:引用System.Data.dll和System.Xml.dll使用ADO.NET连接和操作数据库使用数据提供程序访问数据库操作的典型步骤:(1)建立数据库连接(2&#xff0…

艾美捷曲妥珠单抗Trastuzumab参数和相关研究

曲妥珠单抗是一种重组人源化单克隆抗体,特异性地作用于人表皮生长因子受体-2(HER2)的细胞外部位。此抗体含人IgG1 框架,互补决定区源自鼠抗p185 HER2 抗体,能够与HER2 绑定。 HER2 原癌基因或C-erbB2 编码一个单一的受体样跨膜蛋白&#xff0…

Tyramide Cy5.5,Cyanine5.5 Tyramide,花青素Cy5.5酪酰胺远红色近红外发射染料

​一、理论分析: 中文名:花青素Cy5.5 酪酰胺 英文名:Cyanine5.5 Tyramide,Cy5.5 Tyramide,Tyramide Cy5.5 CAS号:N/A 化学式:C48H52CIN3O2 分子量:738.4 二、产品详情: 外…

【D3.js】1.20-给 D3 元素添加工具提示

title: 【D3.js】1.20-给 D3 元素添加工具提示 date: 2022-12-02 15:04 tags: [JavaScript,CSS,HTML,D3.js,SVG] 继续增强交互性:给元素添加悬停提示。 一、学习目标 如何给元素添加悬停提示? 通过title元素:增加title元素,通过.…

HTML+CSS+JS网页设计期末课程大作业——海贼王(8个页面)动漫网页设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

vector类的常用接口说明

目录 一、(constructor)构造函数声明 二、vector的迭代器 三、vector的增删改查 四、insert和erase,以及查找find(find不属于vector,是stl提供的算法) 五、三种遍历方式 六、源代码 vector是可变大小数组的序列容器 一、(c…

海豚调度器分布式部署

前置准备 服务器 node01,node02,node03三台服务器(本教程服务器系统版本Linux version 3.10.0-1160.el7.x86_64) node01作为master,api,alert节点,node02和node03作为worker节点 安装包下载 下载dolphinscheduler和…

RFID数据采集成为MES系统精准数据

随着信息化、自动化成为企业发展趋势,制造执行系统(MES)是连接计划层和现场控制层之间的纽带,成为企业制造战略重要技术手段。MES生产执行系统主要在生产过程层及管理层之间加强数据集成与分析的力度,拓展优化技术应用的范围,真正…

猿创征文|Python学习工具千千万,我心中的TOP10

前言: 大家好,我是是Dream呀,在我们平时的开发和生活中,每天都在使用、寻找、贡献、创作各类开发者工具,包括开源服务、付费软件、API等。好的工具可以极大帮助我们提升效率,服务业务。作为一名资深的Pytho…

MFC下拉框控件用法

目录 一、属性方式设置下拉框内容 1.Combo Box下拉框 2.Data属性 3.Type属性 4.Sort属性 二、初始化OnInitDialog设置下拉框内容 1.添加Combo Box下拉框变量 2.AddString方法添加选项 3.SetCurSel设置默认显示内容 4.InsertString方法插入内容 4.DeleteString删除指…

数据中心网络设计- 叶脊(Spine-Leaf)网络架构

大家好,我是技福的小咖老师。 随着业务形态的变化,数据中心网络的交换架构也在不断的发展。传统的三层网络结构应用广泛而且技术成熟,但随着技术的发展趋势,它的瓶颈也不断涌现,导致越来越多的网络工程师放弃这种结构…

[附源码]计算机毕业设计JAVA校园一卡通管理信息系统台

[附源码]计算机毕业设计JAVA校园一卡通管理信息系统台 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM…

C#上位机系列(5)—示波器二基础代码+线条绘制

本文是讲解C#.net平台的Winform框架下的第四个内容,手把手介绍上位机项目的创建方式以及一些写软件时常用的功能,讲解从零开始的每一个步骤。 接上一节的介绍,本次内容为上位机项目中示波功能代码的基本函数和画图功能。 目的是通过几行代码…

【联邦学习】联邦学习量化——non-iid数据集下的仿真

文章目录改进项目背景量化函数的改进non-iid数据集的设置Fedlab划分数据集的踩雷改进项目背景 在前面的项目中,虽然对联邦学习中,各个ue训练出来的模型上传的参数进行了量化,并仿真的相关结果。但是仍有一些俺不是非常符合场景的情况&#x…

《Hive性能调优实战》读书笔记

很不错的一本书。章节划分清晰明了,可根据个人需要读相应的章节。Hive各个方面的知识体系都有涉及。可作为工具书,常读常新,值得翻阅。 第2章 Hive问题排查与调优思路 优化方法 PL-SQL和T-SQL经验总结: 通过改写SQL&#xff0…

Hust计算机组成原理实验

文章目录logisim的使用1.添加门电路2.添加引脚3.添加导线4.添加文本5.测试电路补充工具实验一,运算器实验8位串行可控加减法器分析一位全加器八位串行加法器即可给出8位串行可控加减法器回答问题CLA74182(先行进位加法器)参数公式问题位快速加…

10个最常见的JavaScript问题

如今,JavaScript几乎是所有现代web应用程序的核心。这就是为什么JavaScript问题以及找出导致这些问题的错误是web开发人员的首要任务。 用于单页应用程序(SPA)开发、图形和动画以及服务器端JavaScript平台的强大的基于JavaScript的库和框架并…

opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值

1、图像定义: 彩色图像 :三通道,像素值一般为0~255; 灰度图像:单通道,像素值一般为0~255; 二值图像:单通道,像素值一般为0(黑色)、255&#xff08…

Python计算器(包含机制转换)

实现思路: 要优先处理内层括号运算--外层括号运算--先乘除后加减的原则: 1、正则处理用户输入的字符串,然后对其进行判断,判断计算公式是否有括号,有就先将计算公式进行…

判断二叉树是否是平衡二叉树(c#)

问题描述 给定一棵二叉树,判断其是否为平衡二叉树。 示例 示例1 Input: root [3,9,20,null,null,15,7] Output: true 示例2 Input: root [1,2,2,3,3,null,null,4,4] Output: false 解决方案描述 二叉树的每个节点的左子节点和右子节点的高度差小于等于1&#x…