zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
U
¬ý°d$Nã@sœddlmZddlmZmZddlZddlmZddl    m
Z
m Z ddl mZddlmZmZmZmZmZddlmZdd    lmZdd
lmZdd lmZmZmZdd l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'dd l(m)Z)ddl*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9ddl:m;Z;erbddl<Z<ddlm=Z=m>Z>ddl?m@Z@eGdd„deƒƒZAGdd„de-ƒZBGdd„deBe5ƒZCdS)é)Ú annotations)Ú TYPE_CHECKINGÚLiteralN)Ú
get_option)ÚlibÚmissing)Ú NDArrayBacked)ÚAxisIntÚDtypeÚScalarÚnptÚtype_t)Úpa_version_under7p0)Úfunction)Údoc)ÚExtensionDtypeÚStorageExtensionDtypeÚregister_extension_dtype)Ú is_array_likeÚ is_bool_dtypeÚis_dtype_equalÚis_integer_dtypeÚis_object_dtypeÚis_string_dtypeÚ pandas_dtype)Úops)Úmasked_reductions)ÚExtensionArrayÚ FloatingArrayÚ IntegerArray)Ú FloatingDtype)Ú IntegerDtype)Ú PandasArray)Ú extract_array)Úcheck_array_indexer)Úisna)Ú NumpySorterÚNumpyValueArrayLike)ÚSeriesc@sveZdZdZdZeddœdd„ƒZdZdd    dœd
d „Zed dœd d„ƒZ    e
dd„ƒZ ddœdd„Z dddœdd„Z dS)Ú StringDtypea
    Extension dtype for string data.
 
    .. warning::
 
       StringDtype is considered experimental. The implementation and
       parts of the API may change without warning.
 
    Parameters
    ----------
    storage : {"python", "pyarrow"}, optional
        If not given, the value of ``pd.options.mode.string_storage``.
 
    Attributes
    ----------
    None
 
    Methods
    -------
    None
 
    Examples
    --------
    >>> pd.StringDtype()
    string[python]
 
    >>> pd.StringDtype(storage="pyarrow")
    string[pyarrow]
    Ústringzlibmissing.NAType©ÚreturncCstjS©N)Ú
libmissingÚNA©Úself©r2úQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/arrays/string_.pyÚna_valuegszStringDtype.na_value©ÚstorageNÚNonecCsF|dkrtdƒ}|dkr(td|›dƒ‚|dkr<tr<tdƒ‚||_dS)Nzmode.string_storage>ÚpythonÚpyarrowz+Storage must be 'python' or 'pyarrow'. Got z     instead.r9z:pyarrow>=7.0.0 is required for PyArrow backed StringArray.)rÚ
ValueErrorrÚ ImportErrorr6)r1r6r2r2r3Ú__init__ms
ÿ ÿzStringDtype.__init__z    type[str]cCstSr-)Ústrr0r2r2r3ÚtypezszStringDtype.typecCsjt|tƒstdt|ƒ›ƒ‚|dkr*|ƒS|dkr<|ddS|dkrN|ddStd|j›d    |›d
ƒ‚d S) a|
        Construct a StringDtype from a string.
 
        Parameters
        ----------
        string : str
            The type of the name. The storage type will be taking from `string`.
            Valid options and their storage types are
 
            ========================== ==============================================
            string                     result storage
            ========================== ==============================================
            ``'string'``               pd.options.mode.string_storage, default python
            ``'string[python]'``       python
            ``'string[pyarrow]'``      pyarrow
            ========================== ==============================================
 
        Returns
        -------
        StringDtype
 
        Raise
        -----
        TypeError
            If the string is not a valid option.
        z.'construct_from_string' expects a string, got r*zstring[python]r8r5zstring[pyarrow]r9zCannot construct a 'z' from 'ú'N)Ú
isinstancer=Ú    TypeErrorr>Ú__name__)Úclsr*r2r2r3Úconstruct_from_string~s
 ÿ
 
z!StringDtype.construct_from_stringztype_t[BaseStringArray]cCs"ddlm}|jdkrtS|SdS)zq
        Return the array type associated with this dtype.
 
        Returns
        -------
        type
        r©ÚArrowStringArrayr8N)Úpandas.core.arrays.string_arrowrFr6Ú StringArray)r1rFr2r2r3Úconstruct_array_typeªs
 
z StringDtype.construct_array_typez$pyarrow.Array | pyarrow.ChunkedArrayÚBaseStringArray)Úarrayr,cCsŒ|jdkrddlm}||ƒSddl}t||jƒr:|g}n|j}g}|D]}t t     
|¡¡}|  |¡qH|rvt  |¡Stt    j
gddƒSdS)zH
        Construct StringArray from pyarrow Array/ChunkedArray.
        r9rrENÚobject©Údtype) r6rGrFr9r@ÚArrayÚchunksrHÚ_from_sequenceÚnprKÚappendZ_concat_same_type)r1rKrFr9rPÚresultsÚarrZstr_arrr2r2r3Ú__from_arrow__»s
 
zStringDtype.__from_arrow__)N)rBÚ
__module__Ú __qualname__Ú__doc__ÚnameÚpropertyr4Ú    _metadatar<r>Ú classmethodrDrIrVr2r2r2r3r)Ds 
+r)c@s"eZdZdZeejƒdd„ƒZdS)rJz8
    Mixin class for StringArray, ArrowStringArray.
    cCs$|jdkrdd„|DƒSt| ¡ƒS)NécSsg|] }| ¡‘qSr2)Útolist)Ú.0Úxr2r2r3Ú
<listcomp>âsz*BaseStringArray.tolist.<locals>.<listcomp>)ÚndimÚlistÚto_numpyr0r2r2r3r_ßs
zBaseStringArray.tolistN)rBrWrXrYrrr_r2r2r2r3rJÚsrJcsleZdZdZdZdEdddœ‡fdd„ Zd    d
„Zed dd œd dd œdd„ƒZed dd œd dd œdd„ƒZ    eddœdd„ƒZ
dFdd„Z dd„Z ‡fdd„Z dddœdd„ZdGdd œ‡fd!d"„ Zdd#d$œd%dd&d'œd(d)„ZdHdd*d+œd,d-„ZdIdd*d+œd.d/„ZdJdd0d1œd2d3„ZdKdd4d5œd6d7„ZeejƒdLd9d:d;d<d=œ‡fd>d?„ ƒZd@dA„ZeZejZdMd ddBœdCdD„Z‡ZS)NrHaQ
    Extension array for string data.
 
    .. warning::
 
       StringArray is considered experimental. The implementation and
       parts of the API may change without warning.
 
    Parameters
    ----------
    values : array-like
        The array of data.
 
        .. warning::
 
           Currently, this expects an object-dtype ndarray
           where the elements are Python strings
           or nan-likes (``None``, ``np.nan``, ``NA``).
           This may change without warning in the future. Use
           :meth:`pandas.array` with ``dtype="string"`` for a stable way of
           creating a `StringArray` from any sequence.
 
        .. versionchanged:: 1.5.0
 
           StringArray now accepts array-likes containing
           nan-likes(``None``, ``np.nan``) for the ``values`` parameter
           in addition to strings and :attr:`pandas.NA`
 
    copy : bool, default False
        Whether to copy the array of data.
 
    Attributes
    ----------
    None
 
    Methods
    -------
    None
 
    See Also
    --------
    :func:`pandas.array`
        The recommended function for creating a StringArray.
    Series.str
        The string methods are available on Series backed by
        a StringArray.
 
    Notes
    -----
    StringArray returns a BooleanArray for comparison methods.
 
    Examples
    --------
    >>> pd.array(['This is', 'some text', None, 'data.'], dtype="string")
    <StringArray>
    ['This is', 'some text', <NA>, 'data.']
    Length: 4, dtype: string
 
    Unlike arrays instantiated with ``dtype="object"``, ``StringArray``
    will convert the values to strings.
 
    >>> pd.array(['1', 1], dtype="object")
    <PandasArray>
    ['1', 1]
    Length: 2, dtype: object
    >>> pd.array(['1', 1], dtype="string")
    <StringArray>
    ['1', '1']
    Length: 2, dtype: string
 
    However, instantiating StringArrays directly with non-strings will raise an error.
 
    For comparison methods, `StringArray` returns a :class:`pandas.BooleanArray`:
 
    >>> pd.array(["a", None, "c"], dtype="string") == "a"
    <BooleanArray>
    [True, <NA>, False]
    Length: 3, dtype: boolean
    Ú    extensionFÚboolr7)Úcopyr,csHt|ƒ}tƒj||dt|t|ƒƒs.| ¡t ||jtdd¡dS)N©rhr8r5)    r#Úsuperr<r@r>Ú    _validaterÚ_ndarrayr))r1Úvaluesrh©Ú    __class__r2r3r<:s
zStringArray.__init__cCsrt|jƒr"tj|jdds"tdƒ‚|jjdkrBtd|jj›dƒ‚|jjdkrbt |j d¡¡n t |j¡d    S)
z*Validate that we only store NA or strings.T©Úskipnaz7StringArray requires a sequence of strings or pandas.NArLz>StringArray requires a sequence of strings or pandas.NA. Got 'z' dtype instead.éÚKN)    ÚlenrlrÚis_string_arrayr:rNrcZconvert_nans_to_NAZravelr0r2r2r3rkBs ÿ zStringArray._validateN©rNrhz Dtype | NonecCs¼|r6t|tƒr|dks6t|ƒ}t|tƒr2|jdks6t‚ddlm}t||ƒrt|j}|j    }t
j ||dd}t j ||<n&t|dƒrˆt |¡}t
j |t j |d}| |¡}t ||tdd    ¡|S)
Nr*r8r)ÚBaseMaskedArrayF)rhZconvert_na_valuer>)r4rhr5)r@r=rr)r6ÚAssertionErrorZpandas.core.arrays.maskedrwZ_maskÚ_datarZensure_string_arrayr.r/ÚhasattrrRrKÚ__new__rr<)rCZscalarsrNrhrwZ    na_valuesÚresultZnew_string_arrayr2r2r3rQRs 
 
 
 
zStringArray._from_sequencecCs|j|||dS)Nrv)rQ)rCÚstringsrNrhr2r2r3Ú_from_sequence_of_stringsosz%StringArray._from_sequence_of_stringsr+cCs.tj|td}tj|dd…<||ƒj|ddS)NrMFri)rRÚemptyrLr.r/Úastype)rCÚshaperNrmr2r2r3Ú_emptyuszStringArray._emptycCs>ddl}|dkr| ¡}|j ¡}d|| ¡<|j||ddS)z6
        Convert myself into a pyarrow Array.
        rNT)r>Z from_pandas)r9r*rlrhr%rK)r1r>Úparmr2r2r3Ú__arrow_array__{s 
 zStringArray.__arrow_array__cCs"|j ¡}| ¡}d||<|dfSr-)rlrhr%)r1rUÚmaskr2r2r3Ú_values_for_factorizeˆs
z!StringArray._values_for_factorizecsêt|dd}t|t|ƒƒr |j}t||ƒ}t |¡}t |¡}|rN|sNtdƒ‚|r~t|ƒrbt    j
}qØt|t ƒsØt d|›dƒ‚nZt |ƒs”tj|td}t|ƒr²tj|dds²t dƒ‚t|ƒ}| ¡rØ| ¡}t    j
|t|ƒ<tƒ ||¡dS)    NT)Z extract_numpyz)setting an array element with a sequence.zCannot set non-string value 'z' into a StringArray.rMrpzMust provide strings.)r#r@r>rlr$rÚ    is_scalarr:r%r.r/r=rArrRÚasarrayrLrtruÚanyrhrjÚ __setitem__)r1ÚkeyÚvalueZ
scalar_keyZ scalar_valuer…rnr2r3rŠŽs0 
 
 
 
 
ÿzStringArray.__setitem__znpt.NDArray[np.bool_])r…r,cCst |||¡dSr-)rÚ_putmask)r1r…rŒr2r2r3r¯szStringArray._putmaskTricst|ƒ}t||jƒr$|r | ¡S|St|tƒrb|j ¡}| ¡}d||<| |j    ¡}t
||ddSt|t ƒrž| ¡}| ¡}d||<| |j    ¡}t ||ddSt|t ƒr¶t |||¡St |tj¡rö|j ¡}| ¡}d||<| |¡}tj||<|Stƒ ||¡S)NrFriÚ0)rrrNrhr@r!rlr%r€Z numpy_dtyperr rrrrRZ
issubdtypeZfloatingÚnanrj)r1rNrhrUr…rmrnr2r3r€µs6 
 
 
 
 
 
 
zStringArray.astyper©rqÚaxisr=zAxisInt | None)rZrqr‘cKs.|dkrt||ƒ||dStd|›dƒ‚dS)N)ÚminÚmaxrzCannot perform reduction 'z' with string dtype)ÚgetattrrA)r1rZrqr‘Úkwargsr2r2r3Ú_reduceÖszStringArray._reducer )rqr,cKs0t d|¡tj| ¡| ¡|d}| ||¡S©Nr2)rmr…rq)ÚnvZ validate_minrr’rer%Ú_wrap_reduction_result©r1r‘rqr•r|r2r2r3r’Þs ÿzStringArray.mincKs0t d|¡tj| ¡| ¡|d}| ||¡Sr—)r˜Z validate_maxrr“rer%r™ršr2r2r3r“ås ÿzStringArray.maxr()Údropnar,cCs4ddlm}||j|d d¡}|j |j¡|_|S)Nr)Ú value_counts)r›ZInt64)Úpandasrœrlr€ÚindexrN)r1r›rœr|r2r2r3rœìs zStringArray.value_countsÚint)Údeepr,cCs |jj}|r|t |j¡S|Sr-)rlÚnbytesrZmemory_usage_of_objects)r1r r|r2r2r3Ú memory_usageószStringArray.memory_usageÚleftz$NumpyValueArrayLike | ExtensionArrayzLiteral[('left', 'right')]r&znpt.NDArray[np.intp] | np.intp)rŒÚsideÚsorterr,cs |jrtdƒ‚tƒj|||dS)NzOsearchsorted requires array to be sorted, which is impossible with NAs present.)rŒr¤r¥)Z_hasnar:rjÚ searchsorted)r1rŒr¤r¥rnr2r3r¦ùs
ÿzStringArray.searchsortedcCsòddlm}t|tƒr|j}t|ƒt|ƒB}|}t |¡szt|ƒt|ƒkrht    dt|ƒ›dt|ƒ›ƒ‚t
  |¡}||}|j t jkr¼t
j|jdd}tj||<||j||ƒ||<t|ƒSt
jt|jƒdd}||j||ƒ||<|||ƒSdS)Nr©Ú BooleanArrayz"Lengths of operands do not match: z != rLrMrg)Ú pandas.arraysr¨r@rHrlr%rr‡rtr:rRrˆrBrZARITHMETIC_BINOPSZ
empty_liker.r/Úzeros)r1ÚotherÚopr¨r…Zvalidr|r2r2r3Ú _cmp_methods( 
 
ÿ
 
zStringArray._cmp_method)rNÚconvertc     Csøddlm}|dkrtdd}|dkr.|jj}t|ƒ}t |¡}t|ƒsPt    |ƒr®t|ƒr^t
}n|}t|ƒ}    |    rrd}t j |||  d¡d|t |¡d}
|    s¤d|dd…<||
|ƒSt|ƒràt|ƒsàt j |||  d¡d|d    }
t|
ƒSt   |||  d¡¡SdS)
Nrr§r8r5r^Zuint8F)r®r4rN)r®r4)r©r¨r)rNr4r%rRrˆrrrrZmap_infer_maskÚviewrrrH) r1Úfr4rNr®r¨r…rUÚ constructorZna_value_is_nar|r2r2r3Ú_str_map-sF 
 
÷  
ÿzStringArray._str_map)F)N)T)NT)NT)T)F)r£N)NNT)rBrWrXrYZ_typr<rkr]rQr~r‚r„r†rŠrr€r–r’r“rœr¢rrr¦r­Z _arith_methodr.r/Z _str_na_valuer²Ú __classcell__r2r2rnr3rHæsFQÿ
 !"ÿü ÿrH)DÚ
__future__rÚtypingrrÚnumpyrRZpandas._configrZ pandas._libsrrr.Zpandas._libs.arraysrZpandas._typingr    r
r r r Z pandas.compatrZpandas.compat.numpyrr˜Zpandas.util._decoratorsrZpandas.core.dtypes.baserrrZpandas.core.dtypes.commonrrrrrrrZ pandas.corerZpandas.core.array_algosrZpandas.core.arraysrrrZpandas.core.arrays.floatingr Zpandas.core.arrays.integerr!Zpandas.core.arrays.numpy_r"Zpandas.core.constructionr#Zpandas.core.indexersr$Zpandas.core.missingr%r9r&r'rr(r)rJrHr2r2r2r3Ú<module>s:      $