pandas 和 numpy的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas 和 numpy的区别相关的知识,希望对你有一定的参考价值。

一、区别
numpy是数值计算的扩展包,panadas是做数据处理。

二、简介
1)NumPy:N维数组容器
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。

2)Pandas:表格容器
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量快速便捷地处理数据的函数和方法。使Python成为强大而高效的数据分析环境的重要因素之一。
参考技术A pandas
[英]['pændəz][美]['pændəz]
n.
熊猫( panda的名词复数 ); 

There are not many pandas alive in theworld today.
现在世界上活着的熊猫并不多。

bumpy
[英][ˈbʌmpi][美][ˈbʌmpi]
adj.
颠簸的; 崎岖的; 气流不稳的; 

A hot and bumpy ride across the desert
一次炎热而又颠簸的沙漠之行本回答被提问者采纳

pandas str 和 object 类型之间的区别

【中文标题】pandas str 和 object 类型之间的区别【英文标题】:pandas distinction between str and object types 【发布时间】:2016-04-25 04:18:31 【问题描述】:

Numpy 似乎区分了 strobject 类型。例如我可以做::

>>> import pandas as pd
>>> import numpy as np
>>> np.dtype(str)
dtype('S')
>>> np.dtype(object)
dtype('O')

其中dtype('S')和dtype('O')分别对应strobject

然而,熊猫似乎缺乏这种区别,并将str 强制转换为object。 ::

>>> df = pd.DataFrame('a': np.arange(5))
>>> df.a.dtype
dtype('int64')
>>> df.a.astype(str).dtype
dtype('O')
>>> df.a.astype(object).dtype
dtype('O')

强制类型为dtype('S') 也无济于事。 ::

>>> df.a.astype(np.dtype(str)).dtype
dtype('O')
>>> df.a.astype(np.dtype('S')).dtype
dtype('O')

对这种行为有什么解释吗?

【问题讨论】:

作为一个不是完整答案的非常简短的解释:如果您在numpy 中使用字符串 dtype,它基本上是一个固定宽度的 c 类字符串。在pandas 中,它们是“普通”python 字符串,因此是对象类型。 这可能会解决您的问题 - ***.com/questions/21018654/… - 基本上它们存储对象 ndarray,而不是 ndarray 中的字符串。但是,我确实支持他们在区分类型时可以更清楚 - 例如能够区分“str”和“混合”列,这些列也报告为“O”。 【参考方案1】:

Numpy 的字符串 dtypes 不是 python 字符串。

因此,pandas 故意使用原生 python 字符串,这需要对象 dtype。

首先,让我演示一下我所说的 numpy 的字符串不同的含义:

In [1]: import numpy as np
In [2]: x = np.array(['Testing', 'a', 'string'], dtype='|S7')
In [3]: y = np.array(['Testing', 'a', 'string'], dtype=object)

现在,'x' 是一个 numpy 字符串 dtype(固定宽度,类似 c 的字符串),y 是一个原生 Python 字符串数组。

如果我们尝试超过 7 个字符,我们会立即看到差异。字符串 dtype 版本将被截断:

In [4]: x[1] = 'a really really really long'
In [5]: x
Out[5]:
array(['Testing', 'a reall', 'string'],
      dtype='|S7')

虽然对象 dtype 版本可以是任意长度:

In [6]: y[1] = 'a really really really long'

In [7]: y
Out[7]: array(['Testing', 'a really really really long', 'string'], dtype=object)

接下来,|S dtype 字符串无法正确保存 unicode,尽管也有 unicode 固定长度字符串 dtype。我暂时跳过一个例子。

最后,numpy 的字符串实际上是可变的,而 Python 字符串不是。例如:

In [8]: z = x.view(np.uint8)
In [9]: z += 1
In [10]: x
Out[10]:
array(['Uftujoh', 'b!sfbmm', 'tusjoh\x01'],
      dtype='|S7')

出于所有这些原因,pandas 选择永远不会允许类似 C 的固定长度字符串作为数据类型。正如您所注意到的,在pandas 中尝试将 python 字符串强制转换为固定的 numpy 字符串是行不通的。相反,它总是使用原生 Python 字符串,这对大多数用户来说表现得更加直观。

【讨论】:

实际上,pandas 确实允许类似 numpy 的固定长度字节字符串,尽管它们很少使用,例如 pd.Series(['a', 'b', 'c'], dtype='S1') @mdurant Pandas 将接受该声明为有效,但 dtype 将从“S1”更改为“O”(对象)。 曾经有可能,现在可能没有了。

以上是关于pandas 和 numpy的区别的主要内容,如果未能解决你的问题,请参考以下文章

Python:使用pandas和numpy计算标准差的区别

为啥使用numpy和pandas来进行数据处理?

pandas和numpy使用

numpy 模块和 pandas 模块

11-2 numpy/pandas/matplotlib模块

2020-005 pandas与numpy中的字符串处理