作为 Python 语言的一个第三方库,Pandas 在程序中可以很方便的进行引用。但是不得不说的是。Pandas 是在 Python 的另一个科学计算库 Numpy 的基础上进行开发的,因此 Pandas 采用了大量的 Numpy 编码风格。
但它在性能上要优于 Numpy,Numpy 比较适合处理统一的数值数组数据,而 Pandas 主要提供了两种数据结构:一维数组(Series)和二维数组(DataFrame),可以说是专门用来处理表格和混杂数据的工具。
读取txt数据文件
首先自建一个记事本文件。
TXT 文件是一种文本文件,里面存储的数据格式每一行表示行数据,列数据则是通过某种分隔符对一行的数据进行拆分的。
我们新建了一个记事本文件命名为: pandasDataDemo.txt ,里面添加了一些人工智能相关的书名、作者名、出版日期和书的价格,这里我们使用的是 “,” 分割符进行分割列数据的。
read_csv () 函数为 Pandas 读取 txt、csv 数据文件提供了强力的支持,该函数含有四五十个参数,默认是 从文件、URL、文件新对象中加载带有分隔符的数据,默认分隔符是逗号。下面我们列举出它最常用的几个参数。
filepath_or_buffer 可以是 url,类型包括(http, ftp, s3 和文件),比如上面我们 pandasDataDemo.txt 文件的位置为:
C:\Users\13965\Documents\myFuture\IMOOC\pandasCourse-progress\data_source\pandasDataDemo.txt ,如果不指定类型,默认是 file
类型
sep 指定数据的分隔符,默认是 “,”
header 指定数据的从第几行解析,默认是文件数据的第 1 行,header=0,如果不用文件中的某行作为列名,要写上 header=None
names 指定列名,如 names=[‘A’,‘B’,‘C’,‘D’,‘E’]
nrows 指定数据文件中读取多少行的数据,从数据第一行开始
skiprows 指定忽略的行数,从数据文件头开始
skipfooter 指定忽略的行数,从文件的尾部开始(c 引擎不支持)
encoding 指定数据解析时,字符的集类型,通常指定为 “utf-8”
engine 指定数据分析的引擎,默认是 c,c 引擎虽然快但是 Python 引擎的功能更多。
na_filter 是否检查缺失值(空字符串或者是空值),当数据文件较大时,并且很少有缺失值,设置 na_filter=False 能有效的提升读取的速度
import pandas as pds
data_path = "C:/Users/Dell/Desktop/pandasDataDemo.txt"
data = pds.read_csv(data_path)
print(data)
如果报错:AttributeError: module ‘pandas’ has no attribute 'read_csv’说明你建了个pandas的文件(也可能是csv.py,excel.py之类的名字)重命名即可
书名 作者 出版日期 价格
0 python从入门到实战 埃里克 2020 85
1 python数据分析 丹尼尔 2020 80
2 python爬虫技术 李宁 2020 79
3 疯狂python讲义 李刚 2019 113
4 大数据处理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度学习 伊恩 2017 152
7 人工智能算法 杰弗瑞 2020 53
8 人工智能简史 尼克 2017 24
我们将分隔符改成‘=’来测试sep参数:
import pandas as pds
data_path = "C:/Users/Dell/Desktop/pandasDataDemo.txt"
data = pds.read_csv(data_path, sep="=")
print(data)
书名 作者 出版日期 价格
0 python从入门到实战 埃里克 2020 85
1 python数据分析 丹尼尔 2020 80
2 python爬虫技术 李宁 2020 79
3 疯狂python讲义 李刚 2019 113
4 大数据处理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度学习 伊恩 2017 152
7 人工智能算法 杰弗瑞 2020 53
8 人工智能简史 尼克 2017 24
测试参数header:
import pandas as pds
data_path = "C:/Users/Dell/Desktop/pandasDataDemo.txt"
#这里header=3从第四行开始解析
# 因为 Pandas 解析数据的行数是从 0 下标开始的,并且将第 4 行默认作为列索引的值。
data = pds.read_csv(data_path, sep="=", header=3)
print(data)
python爬虫技术 李宁 2020 79
0 疯狂python讲义 李刚 2019 113
1 大数据处理 石宣化 2018 43
2 人工智能 史蒂芬 2018 97
3 深度学习 伊恩 2017 152
4 人工智能算法 杰弗瑞 2020 53
5 人工智能简史 尼克 2017 24
如果不使用数据中的某行作为列名,要声明 header=None ,Pandas 会默认以数字编号为各列名称。
data = pds.read_csv(data_path, sep="=", header=None)
print(data)
0 1 2 3
0 书名 作者 出版日期 价格
1 python从入门到实战 埃里克 2020 85
2 python数据分析 丹尼尔 2020 80
3 python爬虫技术 李宁 2020 79
4 疯狂python讲义 李刚 2019 113
5 大数据处理 石宣化 2018 43
6 人工智能 史蒂芬 2018 97
7 深度学习 伊恩 2017 152
8 人工智能算法 杰弗瑞 2020 53
9 人工智能简史 尼克 2017 24
测试参数names:
# 这里传入names,传入列的名称
data = pds.read_csv(data_path, sep="=", header=None, names=['AA','BB','CC','DD'])
print(data)
AA BB CC DD
0 书名 作者 出版日期 价格
1 python从入门到实战 埃里克 2020 85
2 python数据分析 丹尼尔 2020 80
3 python爬虫技术 李宁 2020 79
4 疯狂python讲义 李刚 2019 113
5 大数据处理 石宣化 2018 43
6 人工智能 史蒂芬 2018 97
7 深度学习 伊恩 2017 152
8 人工智能算法 杰弗瑞 2020 53
9 人工智能简史 尼克 2017 24
测试参数nrows:
# 这里传入nrows
data = pds.read_csv(data_path, sep="=", nrows=3, names=['AA','BB','CC','DD'])
print(data)
AA BB CC DD
0 书名 作者 出版日期 价格
1 python从入门到实战 埃里克 2020 85
2 python数据分析 丹尼尔 2020 80
可以看到这里的 3 行正是我们数据文件中的前三行数据。
测试参数skiprows:
# 这里传入skiprows,忽略多少行
data = pds.read_csv(data_path, sep="=", skiprows=5)
print(data)
大数据处理 石宣化 2018 43
0 人工智能 史蒂芬 2018 97
1 深度学习 伊恩 2017 152
2 人工智能算法 杰弗瑞 2020 53
3 人工智能简史 尼克 2017 24
这里可以看到数据在忽略了 5 行之后,将第 6 行数据解析为列名称,继续向下进行数据的解析。
测试参数skipfooter,encoding,engine:
data = pds.read_csv(data_path, sep="=", skipfooter=7, engine='python', encoding='utf-8')
print(data)
书名 作者 出版日期 价格
0 python从入门到实战 埃里克 2020 85
1 python数据分析 丹尼尔 2020 80
只输入skipfooter这里可以看到输出结果存在的问题,首先根据提示可以看出是 c 引擎不支持 skipfooter 的解析;其实是存在中文乱码的问题,为了解决这两个问题,我们通过 encoding 和 engine 分别制定编码方式和引擎类型。
这里我们通过指定编码 encoding=‘utf-8’ 和解析引擎 engine=‘python’ ,可以看到修复了上面存在的问题,并且看到结果是忽略了数据的后 7 行,只解析了前 3 行数据。
Tips:所谓引擎,最通俗的理解就是动力的来源,我们这里提到的 C 引擎和 Python 引擎,主要是指在 Pandas 解析数据时,解析函数最底层主要运行程序的编写语言,在使用这两个解析器引擎时,C 引擎的速度更快,但是 Python 引擎的功能更多更齐全。
测试参数na_filter:
首先我们将源数据最后两行的作者这一列删掉内容
针对缺失值,read_csv () 函数默认是将缺失值解析后,展示为 NaN ,这里我们看一下解析出来的数据结果:
data = pds.read_csv(data_path, sep="=", engine='python', encoding='utf-8')
print(data)
书名 作者 出版日期 价格
0 python从入门到实战 埃里克 2020 85
1 python数据分析 丹尼尔 2020 80
2 python爬虫技术 李宁 2020 79
3 疯狂python讲义 李刚 2019 113
4 大数据处理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度学习 伊恩 2017 152
7 人工智能算法 NaN 2020 53
8 人工智能简史 NaN 2017 24
data = pds.read_csv(data_path, sep="=", na_filter=False, engine='python', encoding='utf-8')
print(data)
书名 作者 出版日期 价格
0 python从入门到实战 埃里克 2020 85
1 python数据分析 丹尼尔 2020 80
2 python爬虫技术 李宁 2020 79
3 疯狂python讲义 李刚 2019 113
4 大数据处理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度学习 伊恩 2017 152
7 人工智能算法 2020 53
8 人工智能简史 2017 24
这里可以看到,通过 na_filter=False 参数指定后,read_csv () 函数将不对缺失值进行解析。
读取csv数据文件
CSV 即 Comma Separate Values 是逗号分隔文件的缩写,它是一种用来存储数据的纯文本文件,每一栏的数据是通过 “,” 进行分割的,每一行数据都以回车符结束。csv 文件的创建方式有两种:第一种是通过新建记事本,填写好每行以 “,” 分列,回车结尾的数据保存后,将记事本的后缀名改为 .csv 即可;第二种是通过 Excel 创建 CSV 文件。用Excel时要另存为CSV文件。
import pandas as pds
data_path = "C:/Users/Dell/Desktop/Demo.csv"
data = pds.read_csv(data_path)
print(data)
编程语言 推出时间 创始人
0 Java 1995 111
1 python 1991 222
2 c 1927 333
3 js 1995 444
4 php 2012 555
5 c++ 1983 666
读取excel数据文件
xcel 是我们比较常见的办公文件之一,经常用于数据的整理、分析和可视化方面的工作,具有行和列的数据格式,自身含有大量的数据处理和分析函数,但是如果我们 Excel 的数据量比较大,他在数据的处理上就会很慢,甚至有打不开的情况发生,而 Pandas 不仅功能分析上比较强大,在速度上也远远优于 Excel 的处理。下面将具体看一下 Pandas 是如何读取 Excel 数据的,首先我们先创建一个 Excel 数据文件: excel 数据 demo.xlsx:
Pandas 提供了 read_excel () 函数用于 Excel 数据文件的读取,并为其提供了很多的参数用于解析 Excel 数据的设置,接下来我们列举一些该函数中常用的几个参数设置:
io 传入 execl 文件的对象,字符串可能是一个 URL 包括的类型(http,ftp,s3 和文件)
sheet_name 指定读取第几个 sheet 表,默认是第一个,sheet_name=None 可以读取所有的 sheet
header 指定哪一行作为列名,如果不需要里面的行作为列名,要写上 header = None
names 指定列名,如 names=[‘A’,‘B’,‘C’,‘D’,‘E’]
测试参数io:
import pandas as pds
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pds.read_excel(data_path)
print(data)
编程语言 推出时间 创始人
0 Java 1995 111
1 python 1991 222
2 c 1927 333
3 js 1995 444
4 php 2012 555
5 c++ 1983 666
测试参数sheet_name:
该参数用于设置读取 Excel 数据中的哪个工作表,值为工作表名称,首先我们在 “execl 数据 demo.xlsx” 文件中新增一个工作表 Sheet2 。
import pandas as pds
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pds.read_excel(data_path,sheet_name='Sheet2')
print(data)
编程语言2 推出时间 创始人
0 Java2 1995 111
1 python2 1991 222
2 c2 1927 333
3 js2 1995 444
4 php2 2012 555
5 c++2 1983 666
import pandas as pds
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
# sheet_name=None解析所有的工作表
data = pds.read_excel(data_path,sheet_name=None)
print(data)
{
'Sheet1': 编程语言 推出时间 创始人
0 Java 1995 111
1 python 1991 222
2 c 1927 333
3 js 1995 444
4 php 2012 555
5 c++ 1983 666, 'Sheet2': 编程语言2 推出时间 创始人
0 Java2 1995 111
1 python2 1991 222
2 c2 1927 333
3 js2 1995 444
4 php2 2012