第一章
第一节:数据载入与初步观察
载入数据
一般数据交互中最常见的数据类型是 ‘csv’ 和 ‘txt’ 文件,pandas 中分别可以用 read_csv()
和 read_table()
方法进行读取。read_csv()
和 read_table()
最主要的区别在于 sep
参数的默认值不同,前者默认 sep=,
而后者默认 sep=\t
,通过修改分隔符参数,两个方法相互间可以替代使用。
对于非常大型的文件,直接读取后操作会花费较多时间,甚至可能因为内存空间不足而无法顺利读取,此时需要在读取文件时使用 chunksize=...
参数实现分块读取。分块读取后返回一个 TextFileReader 对象,而不是 DataFrame。通常分块读取后会使用 for
循环操作数据,如果要观察或操作部分数据可以使用 get_chunk()
方法获取部分数据块,使用数据拼接方法可以获得完整数据。
数据表头即可以在载入时修改,先载入数据,获取数据后修改表头:
- 载入时修改可以使用
names
参数自定义表头,同时使用header
参数指明数据中原有的表头使其无效 - 先载入数据,再修改表头可以直接修改
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[*, *]
根据位置进行索引
当索引是整数索引时,loc
和 iloc
的异同:如果索引从 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['年龄'])