3
���hEW � @ s2 d Z ddlmZ ddlmZ ddlmZ ddlmZm Z m
Z
mZmZm
Z
mZmZmZmZ ddlZddlZddlmZ ddlmZmZmZmZ dd lmZ dd
lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z( ddl)m*Z* dd
l+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZFmGZGmHZHmIZI ddlJZKddlLmMZMmNZNmOZOmPZPmQZQ ddlRmSZS ddlTmUZU ddlVmWZW ddlXmYZY ddlZj[j\Z]ddl^m_Z_m`Z`maZambZb ddlcmdZd ddlemfZfmgZg ddlhmiZi ddljmkZkmlZlmmZmmnZn ddloj[jpjNZqddlrmsZs ddltmuZu dd lvmwZw dd!lxmyZy dd"lzm{Z{ dd#l|m}Z} dd$l~mZ dd%l�m�Z� ddl�jj�j�Z�ddl�ZJe �r�dd&l�m�Z� dd'l�m�Z� d(gZ�e�d)d(d*d+d,d-d(d.d.d.d.d/d0�Z�d1d2� Z�G d3d(� d(eNj�eOjd�Z�e�j�� e�j�� eQj�e�� eQj�e�� dS )4zG
Data structure for 1-dimensional cross-sectional and time series data
� )�StringIO)�get_terminal_size)�dedent)
�IO�
TYPE_CHECKING�Any�Callable�Iterable�List�Optional�Tuple�Type�UnionN)�
get_option)�lib�
properties�reshape�tslibs)�
no_default)� ArrayLike�Axis�DtypeObj�FrameOrSeriesUnion�IndexKeyFunc�Label�ValueKeyFunc)�function)�InvalidIndexError)�Appender�Substitution�doc)�validate_bool_kwarg�validate_percentile)�convert_dtypes�maybe_cast_to_extension_array�validate_numeric_casting)
�ensure_platform_int�is_bool�is_categorical_dtype�is_dict_like�is_extension_array_dtype�
is_integer�is_iterator�is_list_like�is_object_dtype� is_scalar)�ABCDataFrame)�is_hashable)�isna�na_value_for_dtype�notna�remove_na_arraylike)�
algorithms�base�generic�nanops�ops)�CachedAccessor)�ExtensionArray)�CategoricalAccessor)�SparseAccessor)�!create_series_with_explicit_dtype�
extract_array�
is_empty_data�sanitize_array)�NDFrame)�deprecate_ndim_indexing�
unpack_1tuple)�CombinedDatetimelikeProperties)�Float64Index�Index�
MultiIndex�ensure_index)�
DatetimeIndex)�PeriodIndex)�TimedeltaIndex)�check_bool_indexer)�SingleBlockManager)�ensure_key_mapped)�
StringMethods)�to_datetime)� DataFrame)�
SeriesGroupBy�Series�indexz{0 or 'index'}zPaxis : {0 or 'index'}
Parameter needed for compatibility with DataFrame.z^inplace : boolean, default False
If True, performs operation inplace and returns None.z
np.ndarray� z
.. versionadded:: 0.20.0
)�axes�klass�axes_single_arg�axis�inplace�unique�
duplicatedZoptional_byZoptional_mapper�optional_labels�
optional_axisZversionadded_to_excelc s � fdd�}d� j � d�|_ |S )z.
Install the scalar coercion methods.
c s, t | �dkr� | jd �S td� � ���d S )N� r zcannot convert the series to )�len�iloc� TypeError)�self)� converter� �4/tmp/pip-build-5_djhm0z/pandas/pandas/core/series.py�wrapper~ s z_coerce_method.<locals>.wrapper�__)�__name__)rf ri rg )rf rh �_coerce_methody s rl c s�
e Zd ZU dZdZedgZee dhe
jjB ZddddhZ
ejje
jjB ed d
g�B Zeejjjejjjd�Zeed egd f ed egd f �d,dd�Z�d-dd�Zeed d�dd��Zeed d�dd��Zedd� �Z dZ!�d.e"e#dd�dd�Z$ee%d�dd��Z&ee%d�dd ��Z'eed�d!d"��Z(e(j)edd#�d$d"��Z(ed%d&� �Z*ed'd(� �Z+e,ejj-j�ee.d�d)d*���Z-�d/d,d-�Z/e"d�d.d/�Z0�d0d d�d0d1�Z1e2e.e3j4fZ5ee eed2�d3d4�Z6�d1e3j4d�d5d6�Z7e8e9�Z:e8e"�Z;e8e"�Z<eee2 d�d7d8��Z=e,e
jj>j��d2d d�d:d;��Z>�d3d<d=�Z?�d4e"e"d>�d?d@�Z@�d5eAe"d dA�dBdC�ZBdDdE� ZCdFdG� ZDdHdI� ZEdJdK� ZF�d6e#dL�dMdN�ZGdOdP� ZHdQdR� ZIdSdT� ZJdUdV� ZKdWdX� ZL�d7e#dL�dYdZ�ZMed[d\� �ZN�d8d d�d]d^�ZO�d9d_d`�ZPe d�dadb�ZQ�d:dedf�ZReSeTdg eUdh�di��d;eVeWe eVe e#eVe dj�dkdl��ZXeYeZeef d�dmdn�Z[e,e[j�eYeZeef d�dodp��Z\e2d�dqdr�Z]e^fdsdt�Z_�d<dd�dudv�Z`�d=d d�dwdx�Zae,dy�e,e
jbdz eT �dd9dddddddecd
ddf e#e#e#e#e#e#d{d|�d}d~���Zd�d>dd��Ze�d?d d�d�d��Zf� fd�d��Zg�d@eVd d�� fd�d��
Zh�dAd d�� fd�d��
Zi�dBd�d��Zj�dCd�d��Zk�dDd d�d�d��Zl�dEd�d��Zm�dFe9d�d�d��Zn�dGd eVe" eVe" e9d��d�d��ZoeSd d�deUd��d���dHe"d d��d�d���Zp�dIe9d�d�d��Zqd�d�� Zrd�d�� Zsd�d�� ZteSejjud d���dJd�d���Zu�dKd�d��Zv�dLd�d��ZwexeyeZeyeyf f eexd eZ�dM f d��d�d��Zze,d��e,e
jbd� eT ��dNd e{e#e#e|d��� fd�d��
��Z}�dOd d�d�d��Z~d d�d�d��Zdd�d�d��Z��dPe#e e e#e�d��d�dÄZ��dQe#e#e e e#e#e�dĜd�dƄZ��dRd d�d�dȄZ��dSd d�d�d˄Z��dTd d�d�d̈́Z��dWd d�d�dЄZ�d d�d�d҄Z��dXe#d dӜd�dՄZ��dZd�dׄZ��d[d d�� fd�dل
Z��d\d d�d�dۄZ�eUd܃Z�eUd݃Z�eSe
jbd� eTdg eTd� e�e�d�d��d]d�d��Z�e�Z�eSej�eTdg eTd� d��d^� fd�d� �Z�ddf fd�d�Z��d_d�d�Z�d�d� Z�d�d� Z�eSej�eTdg eTd� d��d`� fd�d� �Z��dadddd
dd�d��� fd�d��Z�e,d��e�f eTd�d�d�d����e,e
jj�j��dbe{e#d��� fd�d��
���Z�eSej�eTdg eTd� eTd� eTd� �d ��dc� f�d�d� �Z��ddd d�� f�d�d�
Z�eSej�feT��deeVd d�� f�d�d�
�Z�ee�d�� f�d �d
�Z�eSej�eTdg d���df� f�d�d
� �Z�eSej�eTdg d���dgd d�� f�d�d�
�Z��dh� f�d�d� Z�d d��d�d�Z��did d��d�d�Z��dje#e#e#e#d �d��d�d�Z�eSej�eTdg d��d d�� f�d�d��Z�eSej�eTdg d��d d�� f�d�d��Z�eSej�eTdg d��d d�� f�d�d��Z�eSej�eTdg d��d d�� f�d�d ��Z��dk�d!�d"�Z��dld d��d$�d%�Z��dmd d��d&�d'�Z�dgZ�d
Z�e�e��Z�d9Z�dZ�e�j�d9�d(�d)�Z��d*�e�de��Z e�de��Z�e�de��Z�e��d+e�j�j��Z�e�de��Z�e�j�j�Z Z�S (n rU a
One-dimensional ndarray with axis labels (including time series).
Labels need not be unique but must be a hashable type. The object
supports both integer- and label-based indexing and provides a host of
methods for performing operations involving the index. Statistical
methods from ndarray have been overridden to automatically exclude
missing data (currently represented as NaN).
Operations between Series (+, -, /, *, **) align values based on their
associated index values-- they need not be the same length. The result
index will be the sorted union of the two indexes.
Parameters
----------
data : array-like, Iterable, dict, or scalar value
Contains data stored in Series.
.. versionchanged:: 0.23.0
If data is a dict, argument order is maintained for Python 3.6
and later.
index : array-like or Index (1d)
Values must be hashable and have the same length as `data`.
Non-unique index values are allowed. Will default to
RangeIndex (0, 1, 2, ..., n) if not provided. If both a dict and index
sequence are used, the index will override the keys found in the
dict.
dtype : str, numpy.dtype, or ExtensionDtype, optional
Data type for the output Series. If not specified, this will be
inferred from `data`.
See the :ref:`user guide <basics.dtypes>` for more usages.
name : str, optional
The name to give to the Series.
copy : bool, default False
Copy input data.
Zseries�namerV �dt�cat�str�sparse�compressZptp)r NFc C s t |t�r8|d kr8|d kr8|dkr8tj| |� || _d S |rpt |t�sRtj||�}|r^|j� }|d krl|j}�n|tj ||t
| ��}t|�r�|d kr�tj
dtdd� |d k r�t|�}|d kr�i }|d k r�| j|�}t |t�r�td���n0t |t��r|d k �r|j|�}n
|jj� }d}n�t |tj��r<t|j��rtd��n�t |t��rt|d k�rZ|j}n|j||d�}d}|j}n�t|��r�| j|||�\}}d }d}n|t |t��r�|d k�r�|j}n|jj |� �s�|�rt!d��n>t"|��r�n2t |t#t$f��rt%d t
|�j&� d
���n
t'j(|�}|d k�r@t)|��s0|g}tj*t|��}nVt)|��r�y4t|�t|�k�r|tdt|�� dt|�� d
���W n t%k
�r� Y nX t |t��r�|d k �r�|j|d|d�}n|�r�|j� }nt+||||dd�}tj||�}t,jj| |� || _| j-d|dd� d S )NFz�The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.� )�
stacklevelz8initializing a Series from a MultiIndex is not supportedzVCannot construct a Series from an ndarray with compound dtype. Use DataFrame instead.)�copyzkCannot pass both SingleBlockManager `data` argument and a different `index` argument. `copy` must be False.�'z' type is unorderedzLength of passed values is z, index implies �.�ignore)�dtype�errorsru T)Zraise_cast_failurer )�fastpath).�
isinstancerO rC �__init__rm Z
from_arrayru rV �ibaseZmaybe_extract_name�typerA �warnings�warn�DeprecationWarningrJ Z_validate_dtyperI �NotImplementedErrorrH �astype�_values�np�ndarrayrb ry �
ValueErrorrU �reindex�_mgrr) �
_init_dict�equals�AssertionErrorr* �set� frozensetrd rk �comZmaybe_iterable_to_listr- �
default_indexrB r8 � _set_axis)re �datarV ry rm ru r{ rg rg rh r} � s�
zSeries.__init__c C sv |rt |j� � \}}t|�}n |dk r4t|�}|}n
g g }}t|||tjd�}|rj|dk rj|j|dd�}|j|j fS )a7
Derive the "_mgr" and "index" attributes of a new Series from a
dictionary input.
Parameters
----------
data : dict or dict-like
Data used to populate the new Series.
index : Index or index-like, default None
Index for the new Series: if None, use dict keys.
dtype : dtype, default None
The dtype for the new Series: if None, infer from data.
Returns
-------
_data : BlockManager for the new Series
index : index for the new Series
N)rV ry Zdtype_if_emptyF)ru )
�zip�items�listr3 r? r� Zfloat64r� r� rV )re r� rV ry �keys�values�srg rg rh r� O s
zSeries._init_dict)�returnc C s t S )N)rU )re rg rg rh �_constructor} s zSeries._constructorrS c C s ddl m} |S )Nr )rS )�pandas.core.framerS )re rS rg rg rh �_constructor_expanddim� s zSeries._constructor_expanddimc C s | j jS )N)r� �_can_hold_na)re rg rg rh r� � s zSeries._can_hold_na)r[ r{ r� c C s� |st |�}|j}|r`t|tttf�s`yt|�}|rB| jj||� W n tj t
fk
r^ Y nX tj| d|� |s�| jj||� dS )z�
Override generic, we want to set the _typ here.
This is called from the cython code when we set the `index` attribute
directly, e.g. `series.index = [1, 2, 3]`.
�_indexN)
rJ �is_all_datesr| rK rL rM r� �set_axisr ZOutOfBoundsDatetimer� �object�__setattr__)re r[ �labelsr{ r� rg rg rh r� � s zSeries._set_axisc C s | j jS )zA
Return the dtype object of the underlying data.
)r� ry )re rg rg rh ry � s zSeries.dtypec C s | j S )zA
Return the dtype object of the underlying data.
)ry )re rg rg rh �dtypes� s z
Series.dtypesc C s | j S )aN
Return the name of the Series.
The name of a Series becomes its index or column name if it is used
to form a DataFrame. It is also used whenever displaying the Series
using the interpreter.
Returns
-------
label (hashable object)
The name of the Series, also the column name if part of a DataFrame.
See Also
--------
Series.rename : Sets the Series name when given a scalar input.
Index.name : Corresponding Index property.
Examples
--------
The Series name can be set initially when calling the constructor.
>>> s = pd.Series([1, 2, 3], dtype=np.int64, name='Numbers')
>>> s
0 1
1 2
2 3
Name: Numbers, dtype: int64
>>> s.name = "Integers"
>>> s
0 1
1 2
2 3
Name: Integers, dtype: int64
The name of a Series within a DataFrame is its column name.
>>> df = pd.DataFrame([[1, 2], [3, 4], [5, 6]],
... columns=["Odd Numbers", "Even Numbers"])
>>> df
Odd Numbers Even Numbers
0 1 2
1 3 4
2 5 6
>>> df["Even Numbers"].name
'Even Numbers'
)�_name)re rg rg rh rm � s 0zSeries.name)�valuer� c C s" |