Pandas 和 Numpy 的差别
第一节我们已经讲过,Pandas 是在 Numpy 上的封装。 继承了 Numpy 的所有优点,但是这种封装有好有坏,我们在这节内容中就先来阐述一下 Pandas 和 Numpy 的对比。
类比 Python¶
用过 Python,你肯定熟悉里面的 List 和 Dictionary, 我比较常拿这两种形态来对比 Numpy 和 Pandas 的关系。
上面就是一种最常见的 Python 列表和字典表达方式。而下面,我们展示的就是 Numpy 和 Pandas 的一种构建方式。 试着点击一下方的 Run
按钮执行代码结果。
你会发现,我们看到的结果中,Numpy 的是没有任何数据标签信息的,你可以认为它是纯数据。而 Pandas 就像字典一样,还记录着数据的外围信息, 比如标签(Column 名)和索引(Row index)。 这也是我为什么总说 Numpy 是 Python 里的列表,而 Pandas 是 Python 里的字典。
对比 Numpy¶
还是回到之前提的问题,对于数据运算,既然我们有了 Numpy,为什么还要用 Pandas?
。对比列表和字典,我们很容易感受到其中的一种原因。 就是 Pandas 帮我们记录的信息量变多了。
在 Numpy 中, 如果你不特别在其他地方标注,你是不清楚记录的这里边记录的是什么信息的。而 Pandas 记录的信息可以特别丰富, 你给别人使用传播数据的时,这些信息也会一起传递过去。或者你自己处理数据时对照着信息来加工数据,也会更加友善。
这就是在我看来 Pandas 对比 Numpy 的一个最直观的好处。
另外 Pandas 用于处理数据的功能也比较多,信息种类也更丰富,特别是你有一些包含字符的表格,Pandas 可以帮你处理分析这些字符型的数据表。 当然还有很多其它功能,比如处理丢失信息,多种合并数据方式,读取和保存为更可读的形式等等。
这些都让 Pandas 绽放光彩。但是,Pandas 也有不足的地方:运算速度稍微比 Numpy 慢。
你想想,因为 Pandas 是在 Numpy 之上的一层封装,所以肯定在处理数据的时候要多几层处理,小数据量的处理不要紧,慢一点就慢一点, 你也感受不到处理速度的变化。但当数据量变大,用 Numpy 要处理 1 小时的数据,你可能用 Pandas 要花两小时。 所以你得依据自己的实际需求来选择到底是用 Numpy 还是 Pandas。
像我,如果在做少量数据的分析时,因为不涉及到机器学习的模型运算等,我都可以用 Pandas,但如果要模型训练, 训练过程中还一直要调用数据处理的功能, 我肯定毫不犹豫都用 Numpy 来做。
总结¶
Pandas 是 Numpy 的封装库,继承了 Numpy 的很多优良传统,也具备丰富的功能组件,但是你还是得分情况来酌情选择要使用的工具。