Task01:数据加载及探索性数据分析

第一章

第一节:数据载入与初步观察

载入数据

一般数据交互中最常见的数据类型是 ‘csv’ 和 ‘txt’ 文件,pandas 中分别可以用 read_csv()read_table() 方法进行读取。read_csv()read_table() 最主要的区别在于 sep 参数的默认值不同,前者默认 sep=, 而后者默认 sep=\t,通过修改分隔符参数,两个方法相互间可以替代使用。

对于非常大型的文件,直接读取后操作会花费较多时间,甚至可能因为内存空间不足而无法顺利读取,此时需要在读取文件时使用 chunksize=... 参数实现分块读取。分块读取后返回一个 TextFileReader 对象,而不是 DataFrame。通常分块读取后会使用 for 循环操作数据,如果要观察或操作部分数据可以使用 get_chunk() 方法获取部分数据块,使用数据拼接方法可以获得完整数据。

数据表头即可以在载入时修改,先载入数据,获取数据后修改表头:

  1. 载入时修改可以使用 names 参数自定义表头,同时使用 header 参数指明数据中原有的表头使其无效
  2. 先载入数据,再修改表头可以直接修改 columns 属性

主要参数总结:

pd.read_csv(path, sep=',', chunksize=None, header=0, names=None)

初步观察数据

观察数据构成的一些方法:

  • info() 方法获取数据表的基本信息(维度,列名称,数据格式,所占空间等),方便了解数据的结构
  • describe() 方法获取数据的描述性统计情况
  • shape 属性返回数据的形状
  • size 属性返回数据元素的个数
  • dtypes 属性返回各列数据的格式
  • axes 属性返回行名和列名

通过一个小样本观察数据:

  • head(n=5) 方法返回前 n 行数据
  • tail(n=5) 方法返回后 n 行数据

判断数据中是否存在空值:isna()isnull() 方法可以返回数据中每一个元素是否为空值,结合布尔简化 any() 可以用于观察每列分别是否存在空值。

保存数据

和读取数据对应,to_csv() 方法可以用于将数据保存为 ‘csv’ 文件,为了避免乱码,可以使用 encoding 参数控制编码格式。

第二节:pandas 基础

pandas 中最基本的两类数据结构是 Series 和 DataFrame,分别用于处理一维数据和二维数据。两类数据分别用 pd.Series()pd.DataFrame() 进行创建

df.columns 可以查看数据的表头。

如果要获取某列数据,可以使用 df[label]df.label 进行索引。

删除/隐藏某些列:

  • del 语句可以直接删除列
  • pop() 方法删除列并返回删除的列
  • drop() 方法返回一个删除列后的新对象,如果要直接作用于原对象,设置 inplace=True
  • 如果要根据另一个对象的索引返回结果,可以使用 reindex_like() 方法

使用布尔索引可以根据指定条件筛选数据,如果存在多个条件,可以使用 &|~ 进行条件运算

根据条件获取局部数据后,行号的顺序就会不连续,如果希望重新获取连续的行号,需要使用 reset_index(drop=True) 方法重置索引。

索引器:

  • loc[*, *] 根据标签进行索引
  • iloc[*, *] 根据位置进行索引

当索引是整数索引时,lociloc 的异同:如果索引从 0 开始整数连续递增,则 loc 的结果与 iloc 相同;否则,loc 根据索引的序号获取数据,而 iloc 一定根据数据间相对的顺序返回数据,两者返回的结果不同。

二维运算:pandas 执行加、减、乘、除等二元运算时默认会根据标签进行数据对齐,然后执行运算。

第三节:探索性数据分析

sort_values() 方法按照值对数据进行排序,其中 by 参数指定哪几列进行排序,ascending 参数指定排序的方式,默认为升序,axis 参数指定沿哪个轴进行排序:

df.sort_values(['票价', '年龄'], ascending=False)

sort_index() 方法按照索引对数据进行排序,用法和 sort_values() 类似。

对数据进行排序后,我们更容易观察数据和结果之间的大致关系,比如在泰坦尼克号数据中,按照票价进行排序后,可以发现票价高的乘客仓位更好,存活率也更高。

对 DataFrame 执行 describe() 方法,可以获取数据的基本统计信息;对某一列数据执行 describe() 方法,可以比较好的了解数据的分布情况。还可以借助直方图更好地了解数据的分布情况:

from matplotlib import pyplot as plt
plt.hist(df['年龄'])
浙ICP备19012682号