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 中注册的扩展类型。如果未指定,有两种可能性:
请注意,当 data 是一个 NumPy 数组时,
data.dtype
并不用于推断数组类型。这是因为 NumPy 无法表示扩展数组中可以保存的所有数据类型。目前,pandas 会为序列推断一个扩展 dtype。
标量类型
数组类型
当标量类型为
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 以确保
返回数据的正确数组类型
返回的数组类型不会随着 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 将总是返回DatetimeArray
或TimedeltaArray
而不是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'.