Python CSV模块
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python CSV模块相关的知识,希望对你有一定的参考价值。
Python CSV模块
a.CSV介绍
1、csv简介
CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本.CSV是一种以逗号分隔数值的文件类型,在数据库或电子表格中,常见的导入导出文件格式就是CSV格式,CSV格式存储数据通常以纯文本的方式存数数据表。
格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件,它的使用是比
较广泛的(Kaggle上一些题目提供的数据就是csv格式),csv虽然使用广泛,但却没有通用的标准,所以在处理csv
格式时常常会碰到麻烦,幸好python内置了csv模块。下面简单介绍csv模块中最常用的一些函数。
a.写入CSV
1.写入列表List
import csv
if __name__ == '__main__':
headers = ['class', 'name', 'sex', 'height', 'year'] # 定义表头(每一列的内容)
rows = [ #
[1, 'xiaoming', 'male', 168, 23],
[1, 'xiaohong', 'female', 162, 22],
[2, 'xiaozhang', 'female', 163, 21],
[2, 'xiaoli', 'male', 158, 21]
]
with open('./files/test1.csv', 'w', newline='')as f: # windows 不需要空号需要设置newline=''
f_csv = csv.writer(f) # 设置写的对象
f_csv.writerow(headers) # 写入 表头
f_csv.writerows(rows) # 写入 多行记录
#1.向csv文件中写入数据
import csv
with open("D:\\\\test.csv",'a') as f: #append 末尾添加数据
row=['曹操','23','学生','黑龙江','5000']
write=csv.writer(f)
write.writerow(row)
print("写入完毕!")
2.写入字典Dict
参考help(csv.DictWriter)可知,在写入字典序列类型数据的时候,需要传入两个参数,一个是文件对象——f,一个是字段名称——fieldnames,到时候要写入表头的时候,只需要调用writerheader方法,写入一行字典系列数据调用writerow方法,并传入相应字典参数,写入多行调用writerows
具体代码如下:
import csv
if __name__ == '__main__':
headers = ['class', 'name', 'sex', 'height', 'year']
rows = [
'class': 1, 'name': 'xiaoming', 'sex': 'male', 'height': 168, 'year': 23,
'class': 1, 'name': 'xiaohong', 'sex': 'female', 'height': 162, 'year': 22,
'class': 2, 'name': 'xiaozhang', 'sex': 'female', 'height': 163, 'year': 21,
'class': 2, 'name': 'xiaoli', 'sex': 'male', 'height': 158, 'year': 21,
]
with open('./files/test2.csv', 'w', newline='')as f:
f_csv = csv.DictWriter(f, headers)
f_csv.writeheader()
f_csv.writerows(rows)
b.读取CSV
读取表头
#方式一
import csv
with open("D:\\\\test.csv") as f:
reader = csv.reader(f)
rows=[row for row in reader]
print(rows[0])
----------
#方式二
import csv
with open("D:\\\\test.csv") as f:
#1.创建阅读器对象
reader = csv.reader(f)
#2.读取文件第一行数据
head_row=next(reader)
print(head_row)
读取csv时需要使用reader,并传如一个文件对象,而且reader返回的是一个可迭代的对象,需要使用for循环遍历,代码如下:
import csv
if __name__ == '__main__':
with open('./files/test1.csv')as f:
f_csv = csv.reader(f)
for row in f_csv:
print(row)
在上面,row是一个列表,如果想要查看固定的某列,则需要加上下标,例如我想要查看name,那么只需要改为row[1]
import csv
if __name__ == '__main__':
with open('./files/test1.csv')as f:
f_csv = csv.reader(f)
for row in f_csv:
print(row[1])
下标从0开始。
c.自定义分隔符
csv.register_dialect('mydialect',delimiter='|', quoting=csv.QUOTE_ALL)
上面一行程序自定义了一个命名为mydialect的dialect,参数只设置了delimiter和quoting这两个,其他的仍然采用
默认值,其中以’|'为分隔符。接下来我们就可以像使用’excel’一样来使用’mydialect’了。我们来看看效果:
在我test.csv中存储如下数据:
with open('test.csv','r') as myFile:
lines=csv.reader(myFile,'mydialect')
print lines.line_num
for line in lines:
print line
输出:
['1,2', '3']
['4,5', '6']
可以看到,现在是以’|'为分隔符,1和2合成了一个字符串(因为1和2之间的分隔符是逗号,而mydialect风格的分隔
符是’|’),3单独一个字符串。
对于writer()函数,同样可以传入mydialect作为参数,这里不赘述。
unregister_dialect(name)
这个函数用于注销自定义的dialect
此外,csv模块还提供get_dialect(name)
、list_dialects()
、field_size_limit([new_limit])
等函数,这些都比较
简单,可以自己试试。比如list_dialects()
函数会列出当前csv模块里所有的dialect:
print(csv.list_dialects())
d.用pandas操作csv
1.读取csv
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data)
2.分析数值字段相关值
1.include=‘all’,代表对所有列进行统计,如果不加这个参数,则只对数值列进行统计
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.describe())
统计变量说明:
count:数量统计,此列共有多少有效值
unipue:不同的值有多少个
std:标准差
min:最小值
25%:四分之一分位数
50%:二分之一分位数(中文数)
75%:四分之三分位数
max:最大值
mean:均值
3.仅仅显示离散型变量:include=[‘O’]
describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者的值)、freq(最高出现的次数)。
4.第一个percentiles,这个参数可以设定数值型特征的统计量,默认[.25, .5, .75],返回25%,50%,75%时候的数据,可修改参数,
如:
5.第三个参数可以指定不选择哪些列。
例如
df.describe(exclude=['O']) #不包括离散列
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.describe(exclude=['O']))
3.读取前n行数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
head_datas = data.head(2)
print(head_datas)
4.读取某一行或某几行的数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
head_datas = data.head(2)
print(data.loc[2,]) #读取第三行
读取某几行的数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
head_datas = data.head(2)
print(data.loc[[0, 1, 3], :]) # 读取第1,2,4行
读取所有行和列数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.loc[:, :])
读取某一列的所有行数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.loc[:,'year'])
读取某几列的某几行
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.loc[[0, 1, 3], ['name', 'height']])
读取某一行某一列的数据
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data.loc[2][2])
4.写入csv
import pandas as pd
#1.写出数据,目标文件是Aim.csv
data.to_csv('Aim.csv')
01.读取网络数据:
import pandas as pd
data_url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv"
#填写url读取
df = pd.read_csv(data_url)
----------
02.读取excel文件数据
import pandas as pd
data = pd.read_excel(filepath)
拷贝内容
import pandas as pd
file=open('test.csv')
#1.读取file中的数据
data=pd.read_csv(file)
#2.把data写到目标文件Aim.csv中
data.to_csv('Aim.csv')
print(data)
参考文章
以上是关于Python CSV模块的主要内容,如果未能解决你的问题,请参考以下文章