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)


参考文章

传送门1

传送门2

传送门3

传送门4

传送门5

以上是关于Python CSV模块的主要内容,如果未能解决你的问题,请参考以下文章

python3使用csv模块读写csv文件

python3使用csv模块读写csv文件

使用Python模块儿csv快速处理csv文件

Python csv模块(读写文件)

Python-csv模块读写csv文件

Python中CSV模块