当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pandas.array用法及代码示例


用法:

pandas.array(data, dtype=None, copy=True)

创建一个数组。

参数

data对象序列

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

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

dtypestr、np.dtype 或 ExtensionDtype,可选

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

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

  1. dataSeriesIndexExtensionArray 时,将从数据中获取 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

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

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

copy布尔值,默认为真

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

返回

扩展数组

新创建的数组。

抛出

ValueError

data 不是一维时。

注意

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

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

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

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

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

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

>>> 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 本身不支持的 timezone-aware 数据的情况对称。

>>> 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。有关 pandas 推断的类型,请参阅dtype 的说明。

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

或者指定实际的 dtype

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

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

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

如 “Notes” 部分所述,未来可能会添加新的扩展类型(通过 pandas 或 3rd 方库),导致返回值不再是 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'.

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.array。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。