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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
Ë
nñúh<Cãó —ddlmZddlmZmZddlZddlmZmZm    Z    ddl
Z ddl m Z ddlZddlmZerddlmZddlmZmZdd    „Z                d                            dd
„Z                                        dd „Zdd „Z    d                    dd „Z                            d                                                                    dd„Zy)é)Ú annotations)ÚabcÚ defaultdictN)Ú TYPE_CHECKINGÚAnyÚ DefaultDict©Úconvert_json_to_lines)Ú    DataFrame)ÚIterable)Ú IgnoreRaiseÚScalarcóF—|ddk(s
|ddk(r|S|dd}t|«S)zJ
    Helper function that converts JSON lists to line delimited JSON.
    rú[éÿÿÿÿú]ér    )Úss úLH:\Change_password\venv_build\Lib\site-packages\pandas/io/json/_normalize.pyÚconvert_to_line_delimitsr s4€ð ˆQ‰43Š;˜1˜R™5 Cš<؈ؠ   ˆ!ˆBˆ€Aä   Ó #Ð#óc óð—d}t|t«r|g}d}g}|D]Ð}tj|«}|j    «D]•\}    }
t|    t
«s t |    «}    |dk(r|    } n||z|    z} t|
t«r|!||k\r|dk7r|j |    «}
|
|| <Œd|j |    «}
|jt|
| ||dz|««Œ—|j|«ŒÒ|r|dS|S)a
    A simplified json_normalize
 
    Converts a nested dict into a flat dict ("record"), unlike json_normalize,
    it does not attempt to extract a subset of the data.
 
    Parameters
    ----------
    ds : dict or list of dicts
    prefix: the prefix, optional, default: ""
    sep : str, default '.'
        Nested records will generate names separated by sep,
        e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
    level: int, optional, default: 0
        The number of levels in the json string.
 
    max_level: int, optional, default: None
        The max depth to normalize.
 
    Returns
    -------
    d - dict or list of dicts, matching `ds`
 
    Examples
    --------
    >>> nested_to_record(
    ...     dict(flat1=1, dict1=dict(c=1, d=2), nested=dict(e=dict(c=1, d=2), d=2))
    ... )
    {'flat1': 1, 'dict1.c': 1, 'dict1.d': 2, 'nested.e.c': 1, 'nested.e.d': 2, 'nested.d': 2}
    FTrr)
Ú
isinstanceÚdictÚcopyÚdeepcopyÚitemsÚstrÚpopÚupdateÚnested_to_recordÚappend) ÚdsÚprefixÚsepÚlevelÚ    max_levelÚ    singletonÚnew_dsÚdÚnew_dÚkÚvÚnewkeys             rr!r!-s€ðX€Iܐ"”dÔØˆTˆØˆ    Ø €FØ òˆÜ— ‘ ˜aÓ ˆØ—G‘G“Iò    Q‰DˆAˆqä˜a¤Ô%ܘ“FØ˜ŠzØ‘à #™¨Ñ)ô ˜a¤Ô&ØÐ%¨%°9Ò*<à˜A’:ØŸ    ™     !› AØ$%E˜&‘MØà—    ‘    ˜!“ ˆAØ L‰LÔ)¨!¨V°S¸%À!¹)ÀYÓOÕ Pð-    Qð.     ‰ eÕð3ñ6ؐa‰yÐØ €Mrcó¸—t|t«rD|j«D]/\}}|›|›|›}|s|j|«}t    ||||¬«Œ1|S|||<|S)a3
    Main recursive function
    Designed for the most basic use case of pd.json_normalize(data)
    intended as a performance improvement, see #15621
 
    Parameters
    ----------
    data : Any
        Type dependent on types contained within nested Json
    key_string : str
        New key (with separator(s) in) for data
    normalized_dict : dict
        The new normalized/flattened Json dict
    separator : str, default '.'
        Nested records will generate names separated by sep,
        e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
    ©ÚdataÚ
key_stringÚnormalized_dictÚ    separator)rrrÚ removeprefixÚ_normalise_json)r1r2r3r4ÚkeyÚvalueÚnew_keys       rr6r6~sz€ô.$œÔØŸ*™*›,ò     ‰JˆCØ#˜  Y K°¨uÐ5ˆGáØ!×.Ñ.¨yÓ9ä ØØ"Ø /Ø#ö     ð     ð Ðð'+ˆ˜
Ñ#Ø Ðrc
ó—|j«Dcic]\}}t|t«rŒ||“Œ}}}t|j«Dcic]\}}t|t«sŒ||“Œc}}di|¬«}i|¥|¥Scc}}wcc}}w)aw
    Order the top level keys and then recursively go to depth
 
    Parameters
    ----------
    data : dict or list of dicts
    separator : str, default '.'
        Nested records will generate names separated by sep,
        e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
 
    Returns
    -------
    dict or list of dicts, matching `normalised_json_object`
    Úr0)rrrr6)r1r4r,r-Ú    top_dict_Ú nested_dict_s      rÚ_normalise_json_orderedr>§s€ð#'§*¡*£,×J™$˜!˜Q´jÀÄDÕ6IA‘ÐJ€IÑJÜ"Ø#Ÿz™z›|× C‘tq˜!¬z¸!¼TÕ/Bˆa‰dÓ CØØØô    €Lð )ˆiÐ (˜<Ð (Ð(ùóKùã Cs”A=­A=Á B
Á&B
cóª—i}t|t«rt||¬«}|St|t«r|Dcgc]}t    ||¬«‘Œ}}|S|Scc}w)a˜
    A optimized basic json_normalize
 
    Converts a nested dict into a flat dict ("record"), unlike
    json_normalize and nested_to_record it doesn't do anything clever.
    But for the most basic use cases it enhances performance.
    E.g. pd.json_normalize(data)
 
    Parameters
    ----------
    ds : dict or list of dicts
    sep : str, default '.'
        Nested records will generate names separated by sep,
        e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
 
    Returns
    -------
    frame : DataFrame
    d - dict or list of dicts, matching `normalised_json_object`
 
    Examples
    --------
    >>> _simple_json_normalize(
    ...     {
    ...         "flat1": 1,
    ...         "dict1": {"c": 1, "d": 2},
    ...         "nested": {"e": {"c": 1, "d": 2}, "d": 2},
    ...     }
    ... )
    {'flat1': 1, 'dict1.c': 1, 'dict1.d': 2, 'nested.e.c': 1, 'nested.e.d': 2, 'nested.d': 2}
 
    )r1r4©r%)rrr>ÚlistÚ_simple_json_normalize)r#r%Únormalised_json_objectÚrowÚnormalised_json_lists     rrBrBÀsd€ðV Ðä"”dÔÜ!8¸bÈCÔ!PÐð "Ð!ô
BœÔ    ØPRÖSÈÔ 6°sÀÖ DÐSÐÐSØ#Ð#Ø !Ð!ùò Ts¶Ac 󤇇‡‡‡‡‡‡‡‡‡‡—    d                            dˆfd„ Šdˆfd„ Št|t«r |s
t«St|t«r|g}n<t|tj
«rt|t «s t|«}nt‚|€|€|€‰€‰€tt|‰¬««S|€+td„|D««rt|‰‰¬«}t|«St|t«s|g}|€g}nt|t«s|g}|Dcgc]}t|t«r|n|g‘Œc}ŠgŠgŠtt«Š‰D    cgc]}    ‰j|    «‘Œc}    Šddˆˆˆˆˆˆˆˆˆˆf
d„ Љ||id¬«t‰«}
‰|
jˆfd    „¬
«}
‰j«D]š\} } ||| z} | |
vrtd | ›d «‚t!j"| t$¬ «} | j&dkDr=t!j(t+| «ft$¬ «} t-| «D]
\}} | | |<Œ | j/‰«|
| <Œœ|
Scc}wcc}    w)a´
    Normalize semi-structured JSON data into a flat table.
 
    Parameters
    ----------
    data : dict or list of dicts
        Unserialized JSON objects.
    record_path : str or list of str, default None
        Path in each object to list of records. If not passed, data will be
        assumed to be an array of records.
    meta : list of paths (str or list of str), default None
        Fields to use as metadata for each record in resulting table.
    meta_prefix : str, default None
        If True, prefix records with dotted (?) path, e.g. foo.bar.field if
        meta is ['foo', 'bar'].
    record_prefix : str, default None
        If True, prefix records with dotted (?) path, e.g. foo.bar.field if
        path to records is ['foo', 'bar'].
    errors : {'raise', 'ignore'}, default 'raise'
        Configures error handling.
 
        * 'ignore' : will ignore KeyError if keys listed in meta are not
          always present.
        * 'raise' : will raise KeyError if keys listed in meta are not
          always present.
    sep : str, default '.'
        Nested records will generate names separated by sep.
        e.g., for sep='.', {'foo': {'bar': 0}} -> foo.bar.
    max_level : int, default None
        Max number of levels(depth of dict) to normalize.
        if None, normalizes all levels.
 
    Returns
    -------
    frame : DataFrame
    Normalize semi-structured JSON data into a flat table.
 
    Examples
    --------
    >>> data = [
    ...     {"id": 1, "name": {"first": "Coleen", "last": "Volk"}},
    ...     {"name": {"given": "Mark", "family": "Regner"}},
    ...     {"id": 2, "name": "Faye Raker"},
    ... ]
    >>> pd.json_normalize(data)
        id name.first name.last name.given name.family        name
    0  1.0     Coleen      Volk        NaN         NaN         NaN
    1  NaN        NaN       NaN       Mark      Regner         NaN
    2  2.0        NaN       NaN        NaN         NaN  Faye Raker
 
    >>> data = [
    ...     {
    ...         "id": 1,
    ...         "name": "Cole Volk",
    ...         "fitness": {"height": 130, "weight": 60},
    ...     },
    ...     {"name": "Mark Reg", "fitness": {"height": 130, "weight": 60}},
    ...     {
    ...         "id": 2,
    ...         "name": "Faye Raker",
    ...         "fitness": {"height": 130, "weight": 60},
    ...     },
    ... ]
    >>> pd.json_normalize(data, max_level=0)
        id        name                        fitness
    0  1.0   Cole Volk  {'height': 130, 'weight': 60}
    1  NaN    Mark Reg  {'height': 130, 'weight': 60}
    2  2.0  Faye Raker  {'height': 130, 'weight': 60}
 
    Normalizes nested data up to level 1.
 
    >>> data = [
    ...     {
    ...         "id": 1,
    ...         "name": "Cole Volk",
    ...         "fitness": {"height": 130, "weight": 60},
    ...     },
    ...     {"name": "Mark Reg", "fitness": {"height": 130, "weight": 60}},
    ...     {
    ...         "id": 2,
    ...         "name": "Faye Raker",
    ...         "fitness": {"height": 130, "weight": 60},
    ...     },
    ... ]
    >>> pd.json_normalize(data, max_level=1)
        id        name  fitness.height  fitness.weight
    0  1.0   Cole Volk             130              60
    1  NaN    Mark Reg             130              60
    2  2.0  Faye Raker             130              60
 
    >>> data = [
    ...     {
    ...         "state": "Florida",
    ...         "shortname": "FL",
    ...         "info": {"governor": "Rick Scott"},
    ...         "counties": [
    ...             {"name": "Dade", "population": 12345},
    ...             {"name": "Broward", "population": 40000},
    ...             {"name": "Palm Beach", "population": 60000},
    ...         ],
    ...     },
    ...     {
    ...         "state": "Ohio",
    ...         "shortname": "OH",
    ...         "info": {"governor": "John Kasich"},
    ...         "counties": [
    ...             {"name": "Summit", "population": 1234},
    ...             {"name": "Cuyahoga", "population": 1337},
    ...         ],
    ...     },
    ... ]
    >>> result = pd.json_normalize(
    ...     data, "counties", ["state", "shortname", ["info", "governor"]]
    ... )
    >>> result
             name  population    state shortname info.governor
    0        Dade       12345   Florida    FL    Rick Scott
    1     Broward       40000   Florida    FL    Rick Scott
    2  Palm Beach       60000   Florida    FL    Rick Scott
    3      Summit        1234   Ohio       OH    John Kasich
    4    Cuyahoga        1337   Ohio       OH    John Kasich
 
    >>> data = {"A": [1, 2]}
    >>> pd.json_normalize(data, "A", record_prefix="Prefix.")
        Prefix.0
    0          1
    1          2
 
    Returns normalized data with columns prefixed with the given string.
    có•—|}    t|t«r|D]}|€ t|«‚||}Œ    |S||}    |S#t$rD}|rtd|›d«|‚‰dk(rtjcYd}~Std|›d|›d«|‚d}~wwxYw)zInternal function to pull fieldNzKey zS not found. If specifying a record_path, all elements of data should have the path.Úignorez) not found. To replace missing values of z% with np.nan, pass in errors='ignore')rrAÚKeyErrorÚnpÚnan)ÚjsÚspecÚextract_recordÚresultÚfieldÚeÚerrorss      €rÚ _pull_fieldz#json_normalize.<locals>._pull_field‚sÏø€ðˆð    Ü˜$¤Ô%Ø!ò+Eؐ~Ü& u›oÐ-Ø# E™]‘Fñ+ð(ˆ ð  ™‘ðˆ øôò     ÙÜØ˜1˜#ð1ð2óððð˜Ò!Ü—v‘v• äØ˜1˜#ÐFÀqÀcðJ6ð7óððûð     ús%…)9±9¹    BÁ&BÁ(BÁ.BÂBc󘕗‰||d¬«}t|t«s-tj|«rg}|St    |›d|›d|›d«‚|S)z¶
        Internal function to pull field for records, and similar to
        _pull_field, but require to return list. And will raise error
        if has non iterable value.
        T)rNz has non list value z
 for path z. Must be list or null.)rrAÚpdÚisnullÚ    TypeError)rLrMrOrSs   €rÚ _pull_recordsz%json_normalize.<locals>._pull_recordsŸsjø€ñ ˜R °dÔ;ˆô˜&¤$Ô'܏y‰y˜Ô Øð ˆ ô     ØdÐ.¨v¨h°jÀÀðG,ð,óððˆ rr@c3ó~K—|]0}|j«Dcgc]}t|t«‘Œc}–—Œ2ycc}w­w©N)Úvaluesrr)Ú.0ÚyÚxs   rú    <genexpr>z!json_normalize.<locals>.<genexpr>Ìs+èø€ÒG¸Q¨Q¯X©X«ZÖ8¨”
˜1œdÕ#Ö8ÑGùÒ8ùs ‚=™8° =©r%r'rc    óh•
—t|t«r|g}t|«dkDrU|D]O}t‰
‰«D]&\}}|dzt|«k(sŒ‰ ||d«||<Œ(‰ ||d|dd||dz¬«ŒQy|D]±}‰ ||d«}|Dcgc]"}t|t«rt    |‰‰¬«n|‘Œ$}}‰j t|««t‰
‰«D]<\}}|dzt|«kDr||}    n ‰ |||d«}    ‰|j |    «Œ>‰j |«Œ³ycc}w)Nrrr©r&r`)rrÚlenÚzipr!r"Úextend)r1ÚpathÚ    seen_metar&ÚobjÚvalr7ÚrecsÚrÚmeta_valÚ_metarSrXÚ_recursive_extractÚlengthsr'Ú    meta_keysÚ    meta_valsÚrecordsr%s          €€€€€€€€€€rrnz*json_normalize.<locals>._recursive_extractçsnø€Ü dœDÔ !ؐ6ˆDÜ ˆt‹9qŠ=Øò WÜ # E¨9Ó 5òC‘HC˜Ø˜q‘y¤C¨£HÓ,Ù)4°S¸#¸b¹'Ó)B˜     #šðCñ# 3 t¨A¡w¡<°°a°b°¸9ÈEÐTUÉIÖVñ  Wðò %Ù$ S¨$¨q©'Ó2ð
"ö    ðô" !¤TÔ*ô% Q¨C¸9ÕEàñððð—‘œs 4›yÔ)Ü # E¨9Ó 5ò4‘HC˜Ø˜q‘y¤3 s£8Ò+Ø#,¨S¡>™á#.¨s°C¸¸°KÓ#@˜Ø˜c‘N×)Ñ)¨(Õ3ð 4ð —‘˜tÕ$ñ# %ùòs 'D/rbcó•—‰›|›SrZ©)r^Ú record_prefixs €rú<lambda>z json_normalize.<locals>.<lambda>
sø€°M°?À1À#Ð1F€r)ÚcolumnszConflicting metadata name z, need distinguishing prefix )Údtyper)F)rLúdict[str, Any]rMú
list | strrNÚboolÚreturnzScalar | Iterable)rLryrMrzr|rA)r)r&Úintr|ÚNone)rrAr rrr rÚNotImplementedErrorrBÚanyr!rÚjoinÚrenamerÚ
ValueErrorrJÚarrayÚobjectÚndimÚemptyrcÚ    enumerateÚrepeat)r1Ú record_pathÚmetaÚ meta_prefixrurRr%r'ÚmrirOr,r-r[ÚirmrSrXrnrorprqrrs    ````       @@@@@@@@rÚjson_normalizerõs_ÿû€ð\FKðØ ðØ",ðØ>Bðà    õõ:ô($œÔ¡dÜ‹{ÐÜ    Dœ$Ô    àˆv‰Ü    Dœ#Ÿ,™,Ô    '´
¸4ÄÔ0EôD‹z‰ä!Ð!ð     ÐØ ˆLØ Ð Ø Ð !Ø Ð äÔ/°¸#Ô>Ó?Ð?àÐÜ ÑGÀ$ÔGÔ Gô$ D¨c¸YÔGˆDܘ‹ÐÜ ˜ ¤TÔ *Ø"mˆ à €|Ø‰Ü ˜œdÔ #؈vˆà8<Ö =°1”*˜Q¤Ô%‰Q¨A¨3Ñ .Ò =€Eð€GØ€Gä(¬Ó.€IØ*/Ö0 3—‘˜#•Ò0€I÷%÷%ñ<t˜[¨"°AÕ6ä wÓ €FàРؗ‘Ó'FÓGˆð—‘Ó!ò+‰ˆˆ1Ø Ð "ؘa‘ˆAà ‰;ÜØ,¨Q¨CÐ/LÐMóð ô
—‘˜!¤6Ô*ˆà ;‰;˜Š?ä—X‘Xœs 1›v˜i¬vÔ6ˆFÜ! !› ò ‘1ؐq’    ð ð—M‘M 'Ó*ˆˆqŠ    ð%+ð& €MùòE >ùò1s Ä
IÅI )rrr|r)r;ú.rN)r$rr%rr&r}r'ú
int | None)
r1rr2rr3ryr4rr|ry)r1ryr4rr|ry)r)r#údict | list[dict]r%rr|zdict | list[dict] | Any)NNNNÚraiserN)r1r’rŠzstr | list | Noner‹z"str | list[str | list[str]] | NonerŒú
str | Nonerur”rRr r%rr'r‘r|r )Ú
__future__rÚ collectionsrrrÚtypingrrrÚnumpyrJÚpandas._libs.writersr
ÚpandasrUr Úcollections.abcr Úpandas._typingr rrr!r6r>rBrrtrrú<module>rsUðõ#÷ó ÷ñó å6ãÝáÝ(÷ó
$ðØØØ ð Nà ðNð
ðNð ð    Nð
ó Nðb&Ø
ð&àð&ð$ð&ðð    &ð
ó &óR)ð6ð2"Øð2"à     ð2"ðó2"ðn&*Ø/3Ø"Ø $Ø!ØØ ðkØ
ðkà"ðkð -ðkðð    kð
ð kð ð kð
ðkððkðôkr