python处理表格真的很好用吗
最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理。但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理。以前正好在一本书上看...
2024.11.221.CSV
就是(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。
由于是纯文本,任何编辑器也都可打开。
与Excel文件不同,CSV文件中:
1)值没有类型,所有值都是字符串
2)不能指定字体颜色等样式
3)不能指定单元格的宽高,不能合并单元格
4)没有多个工作表
2.在CSV文件中,以,作为分隔符,分隔两个单元格。
像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。
不是每个逗号都表示单元格之间的分界。
所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。
Python内置了csv模块。先看看一个简单的例子。
3.从CSV文件中读取数据
import csvfilename = ‘/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv‘ #举例with open(filename) as f: reader = csv.reader(f) print(list(reader))data不能直接打印,list(data)最外层是list,里层的每一行数据都在一个list中,有点像这样
[[‘total_bill‘, ‘tip‘, ‘sex‘, ‘smoker‘, ‘day‘, ‘time‘, ‘size‘], [‘16.99‘, ‘1.01‘, ‘Female‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘10.34‘, ‘1.66‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘3‘], [‘21.01‘, ‘3.5‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘3‘], [‘23.68‘, ‘3.31‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘24.59‘, ‘3.61‘, ‘Female‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘], [‘25.29‘, ‘4.71‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘], [‘8.77‘, ‘2‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘26.88‘, ‘3.12‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘], [‘15.04‘, ‘1.96‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘14.78‘, ‘3.23‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘10.27‘, ‘1.71‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘35.26‘, ‘5‘, ‘Female‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘], [‘15.42‘, ‘1.57‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘], [‘18.43‘, ‘3‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘], ......]
这样数据打印出来,但是就像摊饼一样,不好看。
4.改一下代码
import csvfilename = ‘/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv‘ #举例with open(filename) as f: reader = csv.reader(f) for row in reader: # 行号从1开始 print(reader.line_num, row)结果:
xgj@xgj-PC:~$ /usr/bin/python3.8 /home/xgj/Desktop/333333.py
1 [‘total_bill‘, ‘tip‘, ‘sex‘, ‘smoker‘, ‘day‘, ‘time‘, ‘size‘]
2 [‘16.99‘, ‘1.01‘, ‘Female‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘]
3 [‘10.34‘, ‘1.66‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘3‘]
4 [‘21.01‘, ‘3.5‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘3‘]
5 [‘23.68‘, ‘3.31‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘2‘]
6 [‘24.59‘, ‘3.61‘, ‘Female‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘]
7 [‘25.29‘, ‘4.71‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘]
......
5.写数据到csv文件中
有reader可以读取,当然也有writer可以写入。一次写入一行,一次写入多行都可以。
代码:
import csv#格式:[‘25.29‘, ‘4.71‘, ‘Male‘, ‘No‘, ‘Sun‘, ‘Dinner‘, ‘4‘]# 使用数字和字符串的数字都可以datas = [[‘28.88‘,‘5.21‘ ,‘Male‘,‘Yes‘,‘Sun‘,‘Dinner‘,‘5‘]]with open(‘/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv‘, ‘w‘, newline=‘‘) as f: writer = csv.writer(f) for row in datas: writer.writerow(row)------
注意覆盖原来数据了,所以如果需要,请注意备份或者这是新建一份数据不是追加数据。
------
也可以一次性增加多行数据。
import csvdatas = [[‘28.88‘,‘5.21‘ ,‘Male‘,‘Yes‘,‘Sun‘,‘Dinner‘,‘5‘], [‘29.88‘,‘5.21‘ ,‘Male‘,‘Yes‘,‘Sun‘,‘Dinner‘,‘6‘], [‘30.88‘,‘5.21‘ ,‘Male‘,‘Yes‘,‘Sun‘,‘Dinner‘,‘7‘], [‘31.88‘,‘5.21‘ ,‘Male‘,‘Yes‘,‘Sun‘,‘Dinner‘,‘8‘] ]with open(‘/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv‘, ‘w‘, newline=‘‘) as f: writer = csv.writer(f) for row in datas: #writer.writerow(row) 增加一次数据的 writer.writerows(datas) #增加多行数据,数据重复4次结果,图csv1
图csv2
如果不指定newline=‘‘,则每写入一行将有一空行被写入。
6.DictReader和DictWriter对象
使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。
可访问每一行中那个某个key对应的数据。
假设数据是图csv3
代码如下:
import csvfilename = ‘/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv‘with open(filename) as f: reader = csv.DictReader(f) for row in reader: # total_bill是表第一行的某个数据,作为key max_temp = row[‘total_bill‘] print(max_temp)结果是图csv4
7.使用DictWriter类,可以写入字典形式的数据,同样键也是标头(表格第一行)。
代码如下:
import csvheaders = [‘name‘, ‘age‘]datas = [{‘name‘:‘Bob‘, ‘age‘:23}, {‘name‘:‘Jerry‘, ‘age‘:44}, {‘name‘:‘Tom‘, ‘age‘:15} ]with open(‘/home/xgj/xgjpython/seaborn/seaborn-data-master/example.csv‘, ‘w‘, newline=‘‘) as f: # 标头在这里传入,作为第一行数据 writer = csv.DictWriter(f, headers) writer.writeheader() for row in datas: writer.writerow(row)结果图csv5
# 还可以写入多行
#writer.writerows(datas)
最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理。但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理。以前正好在一本书上看...
2024.11.22前记:这是分享和记录我个人自动化办公技能的一系列文章,意在让职场的小伙伴们看后能够有所帮助和成长。我们都不是专业的程序员,文中尽量使用通俗易懂的语言讲解,即使没有任何编程基础也能够明白。每天花5-10...
2024.11.20前言:通过前面两篇文章,我们用Python处理excel数据得到了结果并保存了文件。打开文件会发现,文件里表格是没有设置格式的,还需手动调整行高列宽等样式,很麻烦。其实,通过Python库模块,能轻松...
2024.11.22既然 pandas 的 merge 方法是按照关系数据库表连接设计的,那么自然有数据库中的"关系验证"功能:merge 设置参数 validate=‘1:1‘ ,表示1对1关系(匹配表1条记录只能匹配...
2024.11.22工作中经常会遇到一些每天都要进行的重复操作,没一点技术含量,做起来却费时费力,还时不时出点小错。为应对这种情况,有些人会用VBA进行处理。但编辑了VBA功能的文件通用性不好,遇到领导、同事的excel...
2024.11.20