熊猫.数组#

熊猫。数组( data , dtype = None , copy = True ) [来源] #

创建一个数组。

参数
data对象序列

data内部的标量应该是dtype标量类型的实例。预计数据 表示一维数据数组。

data是 Index 或 Series 时,将从data中提取底层数组。

dtype str、np.dtype 或 ExtensionDtype,可选

用于数组的数据类型。这可能是 NumPy dtype 或使用 pandas 注册的扩展类型 pandas.api.extensions.register_extension_dtype()

如果没有指定,有两种可能:

  1. dataSeriesIndex、 或 时 ExtensionArray,将从数据中获取数据类型。

  2. 否则,pandas 将尝试从数据推断数据类型。

请注意,当data是 NumPy 数组时,data.dtype用于推断数组类型。这是因为 NumPy 无法表示扩展数组中可以保存的所有数据类型。

目前,pandas 将为以下序列推断扩展数据类型

标量类型

数组类型

pandas.Interval

pandas.arrays.IntervalArray

pandas.Period

pandas.arrays.PeriodArray

datetime.datetime

pandas.arrays.DatetimeArray

datetime.timedelta

pandas.arrays.TimedeltaArray

int

pandas.arrays.IntegerArray

float

pandas.arrays.FloatingArray

str

pandas.arrays.StringArray或者 pandas.arrays.ArrowStringArray

bool

pandas.arrays.BooleanArray

如果未显式给出 dtype,str则确定 标量类型时创建的 ExtensionArray 。pd.options.mode.string_storage

对于所有其他情况,将使用 NumPy 的常用推理规则。

复制布尔值,默认 True

是否复制数据,即使没有必要。根据数据的类型,创建新数组可能需要复制数据,即使copy=False.

返回
扩展阵列

新创建的数组。

加薪
值错误

数据不是一维时。

也可以看看

numpy.array

构造一个 NumPy 数组。

Series

构建一个 pandas 系列。

Index

构建 pandas 索引。

arrays.NumpyExtensionArray

ExtensionArray 包装 NumPy 数组。

Series.array

提取存储在 Series 中的数组。

笔记

省略dtype参数意味着 pandas 将尝试从数据中的值推断出最佳的数组类型。随着 pandas 和第三方库添加新的数组类型,“最佳”数组类型可能会发生变化。我们建议指定dtype以确保

  1. 返回数据的正确数组类型

  2. 当 pandas 和第三方库添加新的扩展类型时,返回的数组类型不会改变

此外,如果返回数组的底层内存表示很重要,我们建议将数据类型指定为具体对象而不是字符串别名或允许推断它。例如,未来版本的 pandas 或第 3 方库可能包含用于字符串数据的专用 ExtensionArray。在这种情况下,以下内容将不再返回arrays.NumpyExtensionArray由 NumPy 数组支持的值。

>>> pd.array(['a', 'b'], dtype=str)
<NumpyExtensionArray>
['a', 'b']
Length: 2, dtype: str32

这将返回专用于字符串数据的新 ExtensionArray。如果您确实需要 NumPy 数组支持新数组,请在 dtype 中指定。

>>> pd.array(['a', 'b'], dtype=np.dtype("<U1"))
<NumpyExtensionArray>
['a', 'b']
Length: 2, dtype: str32

最后,Pandas 的数组大部分与 NumPy 重叠

当传递具有 adatetime64[ns]或dtype的数据时,pandas 将始终返回 a或 而不是 a 。这是为了与时区感知数据的情况对称,NumPy 本身并不支持这种情况。timedelta64[ns]DatetimeArrayTimedeltaArrayNumpyExtensionArray

>>> pd.array(['2015', '2016'], dtype='datetime64[ns]')
<DatetimeArray>
['2015-01-01 00:00:00', '2016-01-01 00:00:00']
Length: 2, dtype: datetime64[ns]
>>> pd.array(["1h", "2h"], dtype='timedelta64[ns]')
<TimedeltaArray>
['0 days 01:00:00', '0 days 02:00:00']
Length: 2, dtype: timedelta64[ns]

例子

如果未指定数据类型,pandas 将从值中推断出最佳数据类型。请参阅dtype的描述以了解 pandas 推断的类型。

>>> pd.array([1, 2])
<IntegerArray>
[1, 2]
Length: 2, dtype: Int64
>>> pd.array([1, 2, np.nan])
<IntegerArray>
[1, 2, <NA>]
Length: 3, dtype: Int64
>>> pd.array([1.1, 2.2])
<FloatingArray>
[1.1, 2.2]
Length: 2, dtype: Float64
>>> pd.array(["a", None, "c"])
<StringArray>
['a', <NA>, 'c']
Length: 3, dtype: string
>>> with pd.option_context("string_storage", "pyarrow"):
...     arr = pd.array(["a", None, "c"])
...
>>> arr
<ArrowStringArray>
['a', <NA>, 'c']
Length: 3, dtype: string
>>> pd.array([pd.Period('2000', freq="D"), pd.Period("2000", freq="D")])
<PeriodArray>
['2000-01-01', '2000-01-01']
Length: 2, dtype: period[D]

您可以使用dtype的字符串别名

>>> pd.array(['a', 'b', 'a'], dtype='category')
['a', 'b', 'a']
Categories (2, object): ['a', 'b']

或者指定实际的数据类型

>>> pd.array(['a', 'b', 'a'],
...          dtype=pd.CategoricalDtype(['a', 'b', 'c'], ordered=True))
['a', 'b', 'a']
Categories (3, object): ['a' < 'b' < 'c']

如果 pandas 没有推断出专用扩展类型,则 arrays.NumpyExtensionArray返回 a。

>>> pd.array([1 + 1j, 3 + 2j])
<NumpyExtensionArray>
[(1+1j), (3+2j)]
Length: 2, dtype: complex128

正如“注释”部分中提到的,将来可能会添加新的扩展类型(通过 pandas 或第 3 方库),导致返回值不再是arrays.NumpyExtensionArray.如果您需要确保未来的行为不会发生变化,请将数据类型指定 为 NumPy 数据类型。

>>> pd.array([1, 2], dtype=np.dtype("int32"))
<NumpyExtensionArray>
[1, 2]
Length: 2, dtype: int32

数据必须是一维的。当输入的维度错误时,会引发 ValueError。

>>> pd.array(1)
Traceback (most recent call last):
  ...
ValueError: Cannot pass scalar '1' to 'pandas.array'.