文章目录
前言
以往项目中也有引入Pandas,用于有关数据处理和分析的环节,结合Python的Web开发,很容易开发出一款轻量BI系统。Pandas、Numpy、Scipy、matplotlib、scikit-learn和Jupyter Notebook结合使用,完全可以组成非常出色的数据分析与挖掘的生产环境工具,数据方面的应用,比matlab强不少,以至于本人也不断强化这方面的积累。单独拿出这方面技能,即可完成数据分析师的相关工作(又称提数工程师)。本文主要归档一些高频使用的预处理方面的函数,注意本文不涉及Pandas数据挖掘和数理统计方面的知识点(会在另外blog给出)。
1、读取数据文件
读取数据的相关接口使用在pandas官网的document有非常详细的说明:在IO tools部分。pandas 不仅能读取基本常用的Excel、csv、文本,还可以读取hadoop文件,或者直接读取数据库等
1.1 读取excel数据文件
-
加载Excel表,使用skiprows=1跳过首行
并指定加载的列,注意数据文件的编码,默认utf-8,常用还有gb2312,根据自身数据而定。%%timeit raw_pd = pd.read_excel(data_file,,skiprows=1,usecols=[1,2,4],name=['item_id','item_name','price'],encoding='gb2312') 181 ms ± 1.32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
这里可以为每个执行单元之前加入
%%timeit
,观察其耗时情况。 -
加载Excel表,使用header=0跳过有列标题的首行
除了使用skiprows=1可跳过首行,header=0也可以实现同样效果raw_pd = pd.read_excel(data_file,header=0,usecols=[1,2,4],name=['item_id','item_name','price'],encoding='gb2312')
-
加载Excel表,首行为数据,不是列标题
若该表第一行不是列标题行而是数据行,则需要指定header=None,否则读取后,第一行数据会被作为column nameraw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,encoding='utf-8')
-
加载Excel表,读取前n行数据
若数据文件大小为几个G,显然若直接全量读取,内存会挤爆,因此可以先读取前n看看。使用nrows=500,表示只读取前500行。raw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None, nrows=500,encoding='utf-8')
-
加载Excel表,跳过所有空白行
若有些表出现了不定数量的空白行,可以使用skip_blank_lines=True处理raw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,skip_blank_lines = True, nrows=500,encoding='utf-8')
-
加载Excel表,通过自定规则,跳过满足规则的行
例如跳过有值为单数的行,定义更复杂的函数,用于跳过满足复杂规则的行。不过,除非这些行很多,否则可以在读取后,直接用正则drop掉来得更有效。pd.read_csv(data_file, skiprows=lambda x: x % 2 != 0)
1.2 读取csv文件
读取csv文件跟读取Excel文件区别不大,这里简单给出示例
raw_pd=pd.read_csv(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,nrows=500,encoding='gb2312')
读取文件,需要注意的地方一般是选择编码,数据文件的编码决定读取数据后,是否正常显示。
1.3 读取数据时,跳过尾行
有些报表一般会在表(例如财务系统导出)的后几行写上制表人、制表日期
这里要注意,若使用c engine,则无法使用从尾部跳过数据的功能:
skipfooter : int, default
0
Number of lines at bottom of file to skip (unsupported with engine=’c’).
raw_pd=pd.read_csv(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None, skipfooter=5,encoding='gb2312')
1.4 读取特定分割符的数据文件
read_csv也可以读取任意文本文件,只需要指定列分割符。
raw_pd=pd.read_csv('data_file.txt',sep='||',encoding='utf-8')
1.5 使用c或者python作为读取文件的引擎
pd.read_*** 方法默认使用python解释器作为读取文件engine,若数据文件大,可选择c engine
engine : {
'c'