Pandas数据结构基础用法

118 阅读3分钟

Head与Tail

head()与tail()用于快速预览Series与DataFrame,默认显示5条数据,也可以指定显示数据的数量。

属性与底层数据

Pandas可以通过多个属性访问元数据:

shape:输出对象的轴维度,与ndarray一致

轴标签

Series:Index(仅有此轴)

DataFrame:Index(行)与列

Pandas对象(Index、Series、DataFrame)相当于数组的容器,用于存储数据、执行计算。大部分类型的底层数组都是numpy.ndarray。不过,Pandas与第三方支持库一般都会扩展NumPy类型系统,添加自定义数组。

.array属性用于提取Index或Series里的数据。

array一般指ExtensionArray。

提取NumPy数组,用to_numpy()或numpy.asarray()。

Series与Index的类型是ExtensionArray时,to_numpy()会复制数据,并强制转换值。

to_numpy()可以控制numpy.ndarray生成的数据类型。以带时区的datetme为例,NumPy未提供时区信息的datetime数据类型,Pandas则提供了两种表现形式:

1.一种是带Timestamp的numpy.ndarray,提供了正确的tz信息。

2.另一种是datetime64[ns],这也是一种numpy.ndarray,值被转化为UTC,但去掉了时区信息。

时区信息可以用dtype=object保存

或用dtype='datetime64[ns]’去除。

提取DataFrame里的原数据稍微有点复杂。DataFrame里所有列的数据类型都一样时,DataFrame.to_numpy()返回底层数据:

DataFrame为同构型数据时,Pandas直接修改原始ndarray,所以修改会直接反应在数据结构里。对于异构型数据,即DataFrame列的数据类型不一样时,就不是这种操作模式了,与轴标签不同,不能为值的属性赋值。

这里我们要注意处理异构型数据时,输出结果ndarray的数据类型适用于涉及的各类数据。若DataFrame里包含字符串,输出结构的数据类型就是object。要是只有浮点数或整数,则输出结果的数据类型是浮点数。

以前,Pandas推荐用Series.values或DataFrame.values从Series或DataFrame里提取数据。

但Pandas改进了此功能,现在,推荐用.array或to_numpy提取数据,别再用.values了。

.values有以下2个缺点:

1.Series含扩展类型时,Series.values无法判断到底是改返回NumPy array,还是返回Extension array。而Series.array则只返回ExtensionArray,且不会复制数据。Series.to_numpy则返回NumPy数组,其代价是需要复制、并强制转换数据的值。

2.DataFrame含多种数据类型时,DataFrame.values会复制数据,并将数据的值强制转换同一种数据类型,这是一种代价较高的操作。DataFrame.to_numpy()则返回NumPy数组,这种方式更清晰,也不会把DataFrame里的数据都当作一种类型。

加速操作

借助numexpr与bottleneck支持库,Pandas可以加速特定类型的二进制数值与布尔操作。

处理大型数据集时,这两个支持库特别有用,加速效果也非常明显。numexpr使用智能分块、缓存与多核技术。bottleneck是一组专属cython例程,处理含nans值的数组时,特别快。

请看下面这个例子(DataFrame包含100列×10万行数据):

这两个支持库默认为启用状态,可用以下选项设置:

如果你想学习Python,但是找不到学习路径和资源,欢迎上指尖编程

在线交互式学习,学Python,更快更好!