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'.