o
    ŀg.                     @  sX  d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
ZddlmZ ddlmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZmZ ddlmZ ddlmZ ddlm Z  erjddl!m"Z"m#Z# ddl$m%Z%m&Z& d8ddZ'G dd deZ(G dd de(Z)G dd de(Z*d9d#d$Z+d:d(d)Z,d;d,d-Z-d;d.d/Z.d<d0d1Z/d=d3d4Z0d>d6d7Z1dS )?z
Module responsible for execution of NDFrame.describe() method.

Method NDFrame.describe() delegates actual execution to function describe_ndframe().
    )annotations)ABCabstractmethod)TYPE_CHECKINGCallablecastN)	Timestamp)DtypeObjNDFrameTnpt)validate_percentile)is_bool_dtypeis_numeric_dtype)
ArrowDtypeDatetimeTZDtypeExtensionDtype)Float64Dtype)concat)format_percentiles)HashableSequence)	DataFrameSeriesobjr
   includestr | Sequence[str] | Noneexcludepercentiles#Sequence[float] | np.ndarray | Nonereturnc                 C  sN   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``.
    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   )_refine_percentilesndimSeriesDescriberr   DataFrameDescriberdescriber
   )r   r   r   r   	describerresult r)   P/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/methods/describe.pydescribe_ndframe7   s   

r+   c                   @  s(   e Zd ZdZdddZedd
dZdS )NDFrameDescriberAbstractzAbstract class for describing dataframe or series.

    Parameters
    ----------
    obj : Series or DataFrame
        Object to be described.
    r   DataFrame | Seriesr   Nonec                 C  s
   || _ d S Nr!   )selfr   r)   r)   r*   __init__n   s   
z!NDFrameDescriberAbstract.__init__r   Sequence[float] | np.ndarrayc                 C  s   dS )zDo describe either series or dataframe.

        Parameters
        ----------
        percentiles : list-like of numbers
            The percentiles to include in the output.
        Nr)   )r0   r   r)   r)   r*   r&   q   s    z!NDFrameDescriberAbstract.describeN)r   r-   r   r.   )r   r2   r   r-   )__name__
__module____qualname____doc__r1   r   r&   r)   r)   r)   r*   r,   e   s
    
r,   c                   @  s$   e Zd ZU dZded< d
ddZd	S )r$   z2Class responsible for creating series description.r   r   r   r2   r   c                 C  s   t | j}|| j|S r/   )select_describe_funcr   )r0   r   describe_funcr)   r)   r*   r&      s   zSeriesDescriber.describeN)r   r2   r   r   )r3   r4   r5   r6   __annotations__r&   r)   r)   r)   r*   r$   |   s   
 r$   c                      s@   e Zd ZU dZded< d fd	d
ZdddZdddZ  ZS )r%   ab  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.
    r   r   r   r   r   r   r.   c                  s:   || _ || _|jdkr|jjdkrtdt | d S )N   r   z+Cannot describe a DataFrame without columns)r   r   r#   columnssize
ValueErrorsuperr1   )r0   r   r   r   	__class__r)   r*   r1      s
   zDataFrameDescriber.__init__r   r2   c                   sj   |   }g }| D ]\}}t|}|||| q
t| t fdd|D ddd}|j |_|S )Nc                   s   g | ]	}|j  d dqS )F)copy)reindex.0x	col_namesr)   r*   
<listcomp>   s    z/DataFrameDescriber.describe.<locals>.<listcomp>r    F)axissort)_select_dataitemsr7   appendreorder_columnsr   r;   rA   )r0   r   dataldesc_seriesr8   dr)   rF   r*   r&      s   zDataFrameDescriber.describec                 C  s   | j du r"| jdu r"tjdg}| jj|d}t|jdkr | j}|S | j dkr7| jdur2d}t|| j}|S | 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   select_dtypeslenr;   r=   )r0   default_includerO   msgr)   r)   r*   rK      s"   


zDataFrameDescriber._select_data)r   r   r   r   r   r   r   r.   )r   r2   r   r   )r   r   )	r3   r4   r5   r6   r9   r1   r&   rK   __classcell__r)   r)   r?   r*   r%      s   
 
r%   rP   Sequence[Series]list[Hashable]c                 C  sT   g }t  }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/   )indexrC   r)   r)   r*   	<genexpr>   s    z"reorder_columns.<locals>.<genexpr>)key)setsortedrY   addrM   )rP   names
seen_namesldesc_indexesidxnamesnamer)   r)   r*   rN      s   

rN   rR   r   Sequence[float]c                 C  s   ddl m} t|}g d| dg }|  |  |  |  g| |  | 	 g }t
| jtrQt
| jtrM| jjdkrBd}nddl}t| }nt }n| jjdv r]td}nd}|||| j|d	S )
zDescribe 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mNiufbfloatr_   ri   dtype)pandasr   r   rl   rm   rn   ro   quantiletolistrp   
isinstanceru   r   r   kindpyarrowfloat64r   rV   ri   )rR   r   r   formatted_percentiles
stat_indexrS   ru   par)   r)   r*   describe_numeric_1d   s(   
r   rO   percentiles_ignoredc           
      C  s   g d}|   }t||dk }|dkr"|jd |jd }}d}n	tjtj}}d}|  |||g}ddlm}	 |	||| j	|dS )zDescribe series containing categorical data.

    Parameters
    ----------
    data : Series
        Series to be described.
    percentiles_ignored : list-like of numbers
        Ignored, but in place to unify interface.
    )rl   uniquetopfreqr   Nobjectrk   rt   )
value_countsrY   r_   ilocrV   nanrl   rv   r   ri   )
rO   r   re   	objcountscount_uniquer   r   ru   r(   r   r)   r)   r*   describe_categorical_1d  s   r   c                 C  s
  ddg}|   }t||dk }|  |g}d}|dkrf|jd |jd }}| jj}	|  j	d}
t
|}|jdurF|	durF||	}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 )zDescribe 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.
    rl   r   r   Ni8)r   r   firstlast)tzr   r   r   rk   rt   )r   rY   rl   r_   r   dtr   dropnavaluesviewr   tzinfo
tz_converttz_localizero   rp   rV   r   rv   r   ri   )rO   r   re   r   r   r(   ru   r   r   r   asintr   r)   r)   r*   $describe_timestamp_as_categorical_1d"  s2   

r   c                 C  sd   ddl m} t|}g d| dg }|  |  |  g| |  |  g }|||| j	dS )zDescribe series containing datetime64 dtype.

    Parameters
    ----------
    data : Series
        Series to be described.
    percentiles : list-like of numbers
        The percentiles to include in the output.
    r   rk   )rl   rm   ro   rp   )r_   ri   )
rv   r   r   rl   rm   ro   rw   rx   rp   ri   )rO   r   r   r}   r~   rS   r)   r)   r*   describe_timestamp_1dR  s   r   r   c                 C  sJ   t | jrtS t| rtS | jjdkst| jtrtS | jjdkr#tS tS )zSelect proper function for describing series based on data type.

    Parameters
    ----------
    data : Series
        Series to be described.
    Mrq   )	r   ru   r   r   r   rz   ry   r   r   )rO   r)   r)   r*   r7   j  s   

r7   npt.NDArray[np.float64]c                 C  st   | du rt g dS t| } t|  d| vr| d t | } t | }| dus,J t|t| k r8t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)	rV   arraylistr   rM   asarrayr   rY   r=   )r   unique_pctsr)   r)   r*   r"     s   


r"   )
r   r
   r   r   r   r   r   r   r   r
   )rP   r]   r   r^   )rR   r   r   rj   r   r   )rO   r   r   rj   r   r   )rO   r   r   rj   r   r   )rO   r   r   r   )r   r   r   r   )2r6   
__future__r   abcr   r   typingr   r   r   numpyrV   pandas._libs.tslibsr   pandas._typingr	   r
   r   pandas.util._validatorsr   pandas.core.dtypes.commonr   r   pandas.core.dtypes.dtypesr   r   r   pandas.core.arrays.floatingr   pandas.core.reshape.concatr   pandas.io.formats.formatr   collections.abcr   r   rv   r   r   r+   r,   r$   r%   rN   r   r   r   r   r7   r"   r)   r)   r)   r*   <module>   s6    
.
D

)
 
0
