pandas.array#

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

创建一个数组。

参数:
数据对象序列

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

data 是一个索引或系列时,将从 data 中提取底层数组。

dtypestr, np.dtype, 或 ExtensionDtype, 可选

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

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

  1. data 是一个 SeriesIndexExtensionArray 时,dtype 将从数据中获取。

  2. 否则,pandas 将尝试从数据中推断 dtype

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

目前,pandas 会为序列推断一个扩展 dtype。

标量类型

数组类型

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.StringArraypandas.arrays.ArrowStringArray

bool

pandas.arrays.BooleanArray

当标量类型为 str 时创建的 ExtensionArray 由 pd.options.mode.string_storage 决定,如果未显式给出 dtype 的话。

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

复制布尔值, 默认为 True

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

返回:
ExtensionArray

新创建的数组。

引发:
ValueError

data 不是一维时。

参见

numpy.array

构造一个 NumPy 数组。

系列

构建一个 pandas 系列。

索引

构建一个 pandas 索引。

arrays.NumpyExtensionArray

封装了NumPy数组的ExtensionArray。

Series.array

提取存储在 Series 中的数组。

备注

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

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

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

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

>>> 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 大部分重叠的数组

当传递 datetime64[ns]timedelta64[ns] 类型的数据时,pandas 将总是返回 DatetimeArrayTimedeltaArray 而不是 NumpyExtensionArray。这是为了与时区感知数据的情况保持一致,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]

例子

如果没有指定 dtype,pandas 会从值中推断出最佳的 dtype。请参阅 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

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

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

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

data 必须是1维的。当输入具有错误的维度时,会引发 ValueError。

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