本文参考《利用python进行数据分析》(原书第二版)第六章部分内容
为了方便我们完成本文数据的操作,我们首先需要进行CSV文件的建立,具体方法可以参考本链接:
https://blog.csdn.net/qq_44614524/article/details/99653255
(一)文本格式数据的读写:
我们初始创建的数据集如下:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
首先我们介绍一些常用的pandas的解析函数,我们主要使用的是其中的第一个(read_csv)。其实第二个解析函数使用的频率也很高,从下图我们不难看出二者的差距知识默认分隔符的不同。
1.读取该文件的话我们可以自己指定列名或者采用pandas自动分配默认的列名。
data = pd.read_csv('abc.csv', header = None)
结果如下:
0 1 2 3 4
0 a b c d message
1 1 2 3 4 hello
2 5 6 7 8 world
3 9 10 11 12 foo
自定义列名代码如下:
data = pd.read_csv('abc.csv', names = ['one', 'two', 'three', 'four'])
输出结果如下:
one two three four
a b c d message
1 2 3 4 hello
5 6 7 8 world
9 10 11 12 foo
2.如果我们想传入一个正则表达式作为分隔符,假设我们传入的是\s+,那么我们可以得到:
data = pd.read_csv('abc.csv', sep = '\s+')
结果为:
a,b,c,d,message
0 1,2,3,4,hello
1 5,6,7,8,world
2 9,10,11,12,foo
解析函数的附加参数很多时候会帮我们处理发生异常的文件,我们假设我们的原始数据第二行出现错误,那么我们可以选择跳过该行。
data = pd.read_csv('abc.csv', skiprows = [0, 2])
我们可以得到原始数据的第一行和第三行。注意:没有行列索引
1 2 3 4 hello
0 9 10 11 12 foo
3.缺失值处理:我们人为将原始数据的hello去掉,再将原始数据进行打印出来看看会是什么样子:
a b c d message
0 1 2 3 4 NaN
1 5 6 7 8 world
2 9 10 11 12 foo
我们可以发现缺失值,pandas将他变成了NaN,有时候我们的缺失值不会显示,或者显示为NULL。
或者我们也可以使用布尔类型的方式来查看我们的元素是否缺失:
print(pd.isnull(data))
输出结果为:
a b c d message
0 False False False False True
1 False False False False False
2 False False False False False
那么返回值为True的位置上的元素就是缺失的。
下图为pandas中read_csv或者read_table函数的一些常用的参数。
4.、文件的写入:我们这里就采用原始的数据(把修改过的数据再修改回去),为了方便大家阅读,我们将修改后的(原始)数据打印出来。
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
4.1、我们可以将数据导出为逗号分隔的文件:
import pandas as pd
data = pd.read_csv('abc.csv')
print(data.to_csv())
#print(data)
输出如下:
,a,b,c,d,message
0,1,2,3,4,hello
1,5,6,7,8,world
2,9,10,11,12,foo
4.2、当然我们也可以采用其他的分隔符,我们将文件写入到sys.stout
print(data.to_csv(sys.stdout, sep = '|'))
输出结果就是我们采用 | 进行分隔的情况。
|a|b|c|d|message
0|1|2|3|4|hello
1|5|6|7|8|world
2|9|10|11|12|foo
4.3、我们会发现我们的行列索引也都被写入到其中,我们也可以选择禁止这两者的写入:
print(data.to_csv(sys.stdout, index = False, header = False))
输出结果如下:
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo