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 似乎区分了 str
和 object
类型。例如我可以做::
>>> import pandas as pd
>>> import numpy as np
>>> np.dtype(str)
dtype('S')
>>> np.dtype(object)
dtype('O')
其中dtype('S')和dtype('O')分别对应str
和object
。
然而,熊猫似乎缺乏这种区别,并将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的区别的主要内容,如果未能解决你的问题,请参考以下文章