當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。