pandas.array#

pandas.array(data, dtype=None, copy=True)[源代码]#

创建一个阵列。

参数
data对象的顺序

里面的标量 data 应为标量类型的实例 dtype 。预料之中, data 表示一维数据数组。

什么时候 data 是索引或系列,则将从中提取基础数组 data

dtypeStr、np.dtype或ExtensionDtype,可选

要用于数组的数据类型。这可以是NumPy dtype,也可以是使用Pandas注册的扩展类型 pandas.api.extensions.register_extension_dtype()

如果未指定,则有两种可能性:

  1. 什么时候 data 是一种 SeriesIndex ,或 ExtensionArray ,即 dtype 将从数据中提取。

  2. 否则,Pandas会试图推断 dtype 从数据来看。

请注意,当 data 是一个NumPy数组, data.dtypenot 用于推断数组类型。这是因为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 or pandas.arrays.ArrowStringArray

bool

pandas.arrays.BooleanArray

标量类型为时创建的Extension数组 str 由以下因素决定 pd.options.mode.string_storage 如果没有显式地给出数据类型。

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

在 1.0.0 版更改: Pandas为整数数据推断出可为空的整型数据类型,为字符串数据推断为字符串数据类型,为布尔数据推断为可为空的布尔数据类型。

在 1.2.0 版更改: Pandas现在还为浮点型输入数据推断可为空的浮点型数据类型

copy布尔值,默认为True

是否复制数据,即使不是必需的。视类型而定 data 创建新阵列可能需要复制数据,即使 copy=False

退货
ExtensionArray

新创建的数组。

加薪
ValueError

什么时候 data 不是一维的。

参见

numpy.array

构造一个NumPy数组。

Series

构建Pandas系列。

Index

构建Pandas指数。

arrays.PandasArray

包装NumPy数组的扩展数组。

Series.array

提取存储在Series中的数组。

注意事项

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

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

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

此外,如果返回数组的基础内存表示形式很重要,我们建议指定 dtype 作为具体对象,而不是字符串别名或允许对其进行推断。例如,未来版本的Pandas或第三方库可能包括用于字符串数据的专用扩展数组。在这种情况下,以下代码将不再返回 arrays.PandasArray 由NumPy数组支持。

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

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

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

最后,Pandas的数组基本上与NumPy重叠

当数据带有 datetime64[ns]timedelta64[ns] Dtype,则Pandas将始终返回一个 DatetimeArrayTimedeltaArray 而不是 PandasArray 。这是为了对称时区感知数据的情况,而NumPy本身并不支持这种情况。

>>> 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没有推断出a型专用延长线 arrays.PandasArray 返回。

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

如“备注”部分所述,未来可能会添加新的扩展类型(由Pandas或第三方库添加),导致返回值不再是 arrays.PandasArray 。指定 dtype 作为NumPy dtype(如果您需要确保行为不会在未来发生变化)。

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

data 必须是一维的。当输入的维度错误时,将引发ValueError。

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