a
    pÝEb´2  ã                   @  sŠ  d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZmZ ddlZddlZddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddlm Z  erÄddl!m"Z"m#Z# dddddddœdd„Z$G dd„ deƒZ%G dd„ de%ƒZ&G dd„ de%ƒZ'dddœdd„Z(d d!d d"œd#d$„Z)d d!d d%œd&d'„Z*d d!d d%œd(d)„Z+d d!d d*œd+d,„Z,d dd-d.œd/d0„Z-dd1d2œd3d4„Z.dS )5z–
Module responsible for execution of NDFrame.describe() method.

Method NDFrame.describe() delegates actual execution to function describe_ndframe().
é    )Úannotations)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAnyÚCallableÚHashableÚSequenceÚcastN)Ú	Timestamp)ÚNDFrameT)Úfind_stack_level)Úvalidate_percentile)Úis_bool_dtypeÚis_datetime64_any_dtypeÚis_numeric_dtypeÚis_timedelta64_dtype)Úconcat)Úformat_percentiles)Ú	DataFrameÚSeriesr   ústr | Sequence[str] | NoneÚboolz#Sequence[float] | np.ndarray | None)ÚobjÚincludeÚexcludeÚdatetime_is_numericÚpercentilesÚreturnc                 C  sR   t |ƒ}| jdkr&ttd| ƒ|d�}nttd| ƒ|||d�}|j|d�}tt|ƒS )aƒ  Describe series or dataframe.

    Called from pandas.core.generic.NDFrame.describe()

    Parameters
    ----------
    obj: DataFrame or Series
        Either dataframe or series to be described.
    include : 'all', list-like of dtypes or None (default), optional
        A white list of data types to include in the result. Ignored for ``Series``.
    exclude : list-like of dtypes or None (default), optional,
        A black list of data types to omit from the result. Ignored for ``Series``.
    datetime_is_numeric : bool, default False
        Whether to treat datetime dtypes as numeric.
    percentiles : list-like of numbers, optional
        The percentiles to include in the output. All should fall between 0 and 1.
        The default is ``[.25, .5, .75]``, which returns the 25th, 50th, and
        75th percentiles.

    Returns
    -------
    Dataframe or series description.
    é   r   ©r   r   r   ©r   r   r   r   )r   )Úrefine_percentilesÚndimÚSeriesDescriberr
   ÚDataFrameDescriberÚdescriber   )r   r   r   r   r   Z	describerÚresult© r(   úT/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/core/describe.pyÚdescribe_ndframe/   s    
þür*   c                   @  s4   e Zd ZdZdddœdd„Zedddœd	d
„ƒZdS )ÚNDFrameDescriberAbstractzèAbstract class for describing dataframe or series.

    Parameters
    ----------
    obj : Series or DataFrame
        Object to be described.
    datetime_is_numeric : bool
        Whether to treat datetime dtypes as numeric.
    zDataFrame | Seriesr   r    c                 C  s   || _ || _d S ©Nr    )Úselfr   r   r(   r(   r)   Ú__init__m   s    z!NDFrameDescriberAbstract.__init__úSequence[float] | np.ndarray©r   r   c                 C  s   dS )z¸Do describe either series or dataframe.

        Parameters
        ----------
        percentiles : list-like of numbers
            The percentiles to include in the output.
        Nr(   )r-   r   r(   r(   r)   r&   q   s    z!NDFrameDescriberAbstract.describeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r   r&   r(   r(   r(   r)   r+   b   s   
r+   c                   @  s*   e Zd ZU dZded< dddœdd„ZdS )	r$   z2Class responsible for creating series description.r   r   r/   r0   c                 C  s   t | j| jƒ}|| j|ƒS r,   )Úselect_describe_funcr   r   )r-   r   Údescribe_funcr(   r(   r)   r&   �   s
    þzSeriesDescriber.describeN)r1   r2   r3   r4   Ú__annotations__r&   r(   r(   r(   r)   r$   |   s   
r$   c                      sD   e Zd ZdZdddddœ‡ fdd„Zddd	œd
d„Zdd„ Z‡  ZS )r%   a¶  Class responsible for creating dataobj description.

    Parameters
    ----------
    obj : DataFrame
        DataFrame to be described.
    include : 'all', list-like of dtypes or None
        A white list of data types to include in the result.
    exclude : list-like of dtypes or None
        A black list of data types to omit from the result.
    datetime_is_numeric : bool
        Whether to treat datetime dtypes as numeric.
    r   r   r   r!   c                  s>   || _ || _|jdkr*|jjdkr*tdƒ‚tƒ j||d� d S )Né   r   z+Cannot describe a DataFrame without columns)r   )r   r   r#   ÚcolumnsÚsizeÚ
ValueErrorÚsuperr.   )r-   r   r   r   r   ©Ú	__class__r(   r)   r.   ˜   s
    zDataFrameDescriber.__init__r/   r0   c                   sn   |   ¡ }g }| ¡ D ]$\}}t|| jƒ}| |||ƒ¡ qt|ƒ‰ t‡ fdd„|D ƒddd�}|j ¡ |_|S )Nc                   s   g | ]}|j ˆ d d�‘qS )F)Úcopy)Zreindex©Ú.0Úx©Z	col_namesr(   r)   Ú
<listcomp>²   ó    z/DataFrameDescriber.describe.<locals>.<listcomp>r   F)ZaxisÚsort)	Ú_select_dataÚitemsr5   r   ÚappendÚreorder_columnsr   r9   r?   )r-   r   ÚdataÚldescÚ_Úseriesr6   Údr(   rC   r)   r&   ¨   s    ýzDataFrameDescriber.describec                 C  s�   | j du rP| jdu rPtjg}| jr,| d¡ | jj|d�}t|j	ƒdkrŒ| j}n<| j dkrx| jdurpd}t
|ƒ‚| j}n| jj| j | jd�}|S )zSelect columns to be described.NÚdatetime)r   r   Úallz*exclude must be None when include is 'all')r   r   )r   r   ÚnpÚnumberr   rI   r   Zselect_dtypesÚlenr9   r;   )r-   Zdefault_includerK   Úmsgr(   r(   r)   rG   ¹   s"    


þzDataFrameDescriber._select_data)r1   r2   r3   r4   r.   r&   rG   Ú__classcell__r(   r(   r=   r)   r%   ‰   s   r%   zSequence[Series]zlist[Hashable])rL   r   c                 C  sD   g }t dd„ | D ƒtd�}|D ] }|D ]}||vr&| |¡ q&q|S )z,Set a convenient order for rows for display.c                 s  s   | ]}|j V  qd S r,   )Úindexr@   r(   r(   r)   Ú	<genexpr>Õ   rE   z"reorder_columns.<locals>.<genexpr>)Úkey)ÚsortedrT   rI   )rL   ÚnamesZldesc_indexesZidxnamesÚnamer(   r(   r)   rJ   Ò   s    rJ   r   zSequence[float])rN   r   r   c                 C  sj   ddl m} t|ƒ}g d¢| dg }|  ¡ |  ¡ |  ¡ |  ¡ g|  |¡ ¡  |  	¡ g }|||| j
d�S )zÛDescribe series containing numerical data.

    Parameters
    ----------
    series : Series
        Series to be described.
    percentiles : list-like of numbers
        The percentiles to include in the output.
    r   ©r   )ÚcountÚmeanÚstdÚminÚmax©rW   r\   )Úpandasr   r   r^   r_   r`   ra   ÚquantileÚtolistrb   r\   )rN   r   r   Úformatted_percentilesÚ
stat_indexrO   r(   r(   r)   Údescribe_numeric_1dÝ   s    
ÿþÿri   )rK   Úpercentiles_ignoredr   c           
      C  s„   g d¢}|   ¡ }t||dk ƒ}|dkrD|jd |jd  }}d}ntjtj }}d}|  ¡ |||g}ddlm}	 |	||| j	|d�S )zãDescribe series containing categorical data.

    Parameters
    ----------
    data : Series
        Series to be described.
    percentiles_ignored : list-like of numbers
        Ignored, but in place to unify interface.
    )r^   ÚuniqueÚtopÚfreqr   NÚobjectr]   ©rW   r\   Údtype)
Úvalue_countsrT   rW   ÚilocrR   Únanr^   rd   r   r\   )
rK   rj   r[   Ú	objcountsÚcount_uniquerl   rm   rp   r'   r   r(   r(   r)   Údescribe_categorical_1d÷   s    rv   c                 C  s
  ddg}|   ¡ }t||dk ƒ}|  ¡ |g}d}|dkrÌ|jd |jd  }}| jj}	|  ¡ j 	d¡}
t
|ƒ}|jdurŒ|	durŒ| |	¡}n
| |	¡}|g d¢7 }|||t
|
 ¡ |	d�t
|
 ¡ |	d�g7 }n |dd	g7 }|tjtjg7 }d
}ddlm} |||| j|d�S )zøDescribe series containing timestamp data treated as categorical.

    Parameters
    ----------
    data : Series
        Series to be described.
    percentiles_ignored : list-like of numbers
        Ignored, but in place to unify interface.
    r^   rk   r   NÚi8)rl   rm   ÚfirstÚlast)Útzrl   rm   rn   r]   ro   )rq   rT   r^   rW   rr   Údtrz   ZdropnaÚvaluesÚviewr   ÚtzinfoZ
tz_convertZtz_localizera   rb   rR   rs   rd   r   r\   )rK   rj   r[   rt   ru   r'   rp   rl   rm   rz   Zasintr   r(   r(   r)   Ú$describe_timestamp_as_categorical_1d  s2    
ü
r   )rK   r   r   c                 C  sd   ddl m} t|ƒ}g d¢| dg }|  ¡ |  ¡ |  ¡ g|  |¡ ¡  |  ¡ g }|||| j	d�S )zÛDescribe series containing datetime64 dtype.

    Parameters
    ----------
    data : Series
        Series to be described.
    percentiles : list-like of numbers
        The percentiles to include in the output.
    r   r]   )r^   r_   ra   rb   rc   )
rd   r   r   r^   r_   ra   re   rf   rb   r\   )rK   r   r   rg   rh   rO   r(   r(   r)   Údescribe_timestamp_1dG  s    ÿþÿr€   r   )rK   r   r   c                 C  sZ   t | jƒrtS t| ƒrtS t| jƒrD|r,tS tjdt	t
ƒ d� tS nt| jƒrRtS tS dS )zêSelect proper function for describing series based on data type.

    Parameters
    ----------
    data : Series
        Series to be described.
    datetime_is_numeric : bool
        Whether to treat datetime dtypes as numeric.
    zçTreating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.)Ú
stacklevelN)r   rp   rv   r   ri   r   r€   ÚwarningsÚwarnÚFutureWarningr   r   r   )rK   r   r(   r(   r)   r5   b  s     

ú
r5   z%np.ndarray[Any, np.dtype[np.float64]]r0   c                 C  st   | du rt  g d¢¡S t| ƒ} t| ƒ d| vr8|  d¡ t  | ¡} t  | ¡}| dusXJ ‚t|ƒt| ƒk rptdƒ‚|S )zº
    Ensure that percentiles are unique and sorted.

    Parameters
    ----------
    percentiles : list-like of numbers, optional
        The percentiles to include in the output.
    N)g      Ð?ç      à?g      è?r…   z%percentiles cannot contain duplicates)	rR   ÚarrayÚlistr   rI   Zasarrayrk   rT   r;   )r   Zunique_pctsr(   r(   r)   r"   †  s    


r"   )/r4   Ú
__future__r   Úabcr   r   Útypingr   r   r   r   r	   r
   r‚   ÚnumpyrR   Zpandas._libs.tslibsr   Zpandas._typingr   Zpandas.util._exceptionsr   Zpandas.util._validatorsr   Zpandas.core.dtypes.commonr   r   r   r   Zpandas.core.reshape.concatr   Zpandas.io.formats.formatr   rd   r   r   r*   r+   r$   r%   rJ   ri   rv   r   r€   r5   r"   r(   r(   r(   r)   Ú<module>   s2    3I 0$