ih1 nUdZddlmZddlmZddlmZmZddlmZddl Z ddl Z ddl Z ddl m Z mZmZmZmZmZddlZddlZddlmZdd lmZdd lmZdd lmZmZmZm Z m!Z!dd l"m#Z#dd l$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ddl;mZ>ddl?m@Z@er$ddlAmBZBmCZCmDZDddlEmFZFddl mGZGddlHmIZImJZJmKZKmLZLmMZMdZNdZOdZPdZQd ZRd!eOd"ePd"eQd"e>d#d"e>d$d%eRd" ZSgd&ZTed'd(d(ZUd)eVd*<ed+d(d(ZWd)eVd,<dd2ZXdd3ZYd4ZZd)eVd5<d6Z[d)eVd7<d8Z\d)eVd9<d:Z]d)eVd;<d>> dates = pd.Series([52]) >>> _stata_elapsed_date_to_datetime_vec(dates, "%tw") 0 1961-01-01 dtype: datetime64[s] Notes ----- datetime/c - tc milliseconds since 01jan1960 00:00:00.000, assuming 86,400 s/day datetime/C - tC - NOT IMPLEMENTED milliseconds since 01jan1960 00:00:00.000, adjusted for leap seconds date - td days since 01jan1960 (01jan1960 = 0) weekly date - tw weeks since 1960w1 This assumes 52 weeks in a year, then adds 7 * remainder of the weeks. The datetime value is the start of the week in terms of days in the year, not ISO calendar weeks. monthly date - tm months since 1960m1 quarterly date - tq quarters since 1960q1 half-yearly date - th half-years since 1960h1 yearly date - ty years since 0000 r6tcmszM8[ms]dtypeindex)r8tdr9dDzM8[D]r;tm zM8[M]zM8[s]r<tqzM8[3M]r=thzM8[6M]r>tyrAM8[Y]FTg?r7tCz9Encountered %tC format. Leaving in Stata Internal Format. stacklevelr:tw4z Period[Y]S)howsz Date fmt  not understood) startswithnp timedelta64r@rBarray_valuesr&rNyearastypeisnananyint64warningswarnrobjectrviewasfreq ValueError)rCrDrOresordinalsbad_locshas_bad_values conv_datesrodaysper_yper_d per_d_shiftedper_sconv_dates_arrs =C:\PYTHON\_runtimes\venv\Lib\site-packages\pandas/io/stata.py#_stata_elapsed_date_to_datetime_vecrs^ ~~m$$". ^K*4d ; ;hu}H555:c---- 0 1 1. ^K*4c : :hu}G444r9c----  & &.K,z>"DDhxw///66w??c----  & &.K,z>!CChxx00077@@c----  & & .K,z>!CChxx00077@@c----  & &.4<hxw///66w??c----xHN||~~&"% h LL " "E ~~m$$; G'))    E000  '#&Jx   & & ;%2+- a#((55 Sc ** , $$Sc$22G,,N%+>>> 9S999:::#" 8 c |j d}|dz |dz } d,d- fd }t|}|j |rFtj|jdrt t|j|<nt|j|<|dvr||d}|j }n`|dvr&tj dt|}n6|dvr||d}|j |z}n|dvr1||dd}d|j tj z z|jdzz}n|dvr0||d}d|j tj z z|jzdz }n|dvr3||d}d|j tj z z|jdz d zz}ny|d!vrI||d}d"|j tj z z|jd#kt"z}n,|d$vr||d}|j }nt%d%|d&t'|t(jd'}t-jd(d)d*}|||<t'| d+S).aO Convert from datetime to SIF. https://www.stata.com/help.cgi?datetime Parameters ---------- dates : Series Series or array containing datetime or datetime64[ns] to convert to the Stata Internal Format given by fmt fmt : str The format to convert to. Can be, tc, td, tw, tm, tq, th, ty l"R:@BFrCr&deltaboolrorrFr#cxi}tj|jdr |ri|jdt t dz }|jtj |d<|s|r-t|}|j j |d<|j j|d<|rtj|d|j}||z }tj|dd|d <nt#|d d krt%jd t(t+|r:|jt z }d fd } tj| } | |dz|d<|r9|d} | jdz|d<| j|ddzz |d<|r&dd} tj| } | ||d <nt1dt3|S)NMrJrromonthr]zm8[D]rsrFskipnarzConverting object-dtype columns of datetimes to datetime64 when writing to stata is deprecated. Call `df=df.infer_objects(copy=False)` before writing to stata instead.r`xrrFfloatc>|jzd|jzz|jzS)Nr)rseconds microseconds)r US_PER_DAYs rfzC_datetime_to_stata_elapsed_vec..parse_dates_safe..fIs#%.QY1FFWWrrc&d|jz|jzS)Nd)rorrs rzJ_datetime_to_stata_elapsed_vec..parse_dates_safe..Os3|t|jddz jS)Nr?)rrorrs rgzC_datetime_to_stata_elapsed_vec..parse_dates_safe..gTsA 6 66<.parse_dates_safe*s|  ?5; , ,/  ?"X--d33i 6L6L6T6T77 (/44RX>>'  4t 4*511 &,1& '-3'  KZ..55g>>EEekRR z)Jt,,33G<<AA'JJ& u - - - ; ; MU+--      / 3XXXXXXLOOQuXX.'  B"[[)I)IJJ &.#5& '/!F)c/A'  %====LOOAeHH& 7  %((((rrrHT)rr^z'Stata Internal Format tC not supported.r`)r8rOrb)rorrdrerR)rorTr?rUrWrXrZr[Format z! is not a known Stata date format)rLcopy(> I,,RX66S bh  x Cy}}&&$s)--//F*B*B I,,RX66S bh   GS :--$s)--//[2P2P I,,RX66S  I,,RZ88S 9==??e++tCy}}(/J/J+227IFFB rz2:. . .xS ""&&((  EcEEEIMMOOE ""u{':': I,,RZ88S "*$$;&&$>#>>U>>/:>>>  7!! 7,@cAUV.6s*+    !'))    Krc.eZdZdZ ddd Zdd ZddZdS)StataValueLabelz Parse a categorical column and prepare formatted output Parameters ---------- catarray : Series Categorical Series to encode encoding : {"latin-1", "utf-8"} Encoding to use for value labels. latin-1catarrayr&encodingLiteral['latin-1', 'utf-8']rFNonec|dvrtd|j|_||_|jj}t ||_|dS)Nrutf-8%Only latin-1 and utf-8 are supported.) ryrlabname _encodingcat categories enumerate value_labels_prepare_value_labels)selfrrrs r__init__zStataValueLabel.__init__Esa / / /DEE E} !\, %j11 ""$$$$$rcd|_g|_d|_tjgtj|_tjgtj|_d|_g}g}|j D] }|d}t|tsTt|}tj t|jt"t%||j}||j|xjt|dzz c_||d|j||xjdz c_tj|tj|_tj|tj|_dd|jzzd|jzz|jz|_dS)zEncode value labels.rrKr?r`rWN)text_lentxtnrkrmroffvallenrrrErtrurrrrrencoderappend)roffsetsvaluesvlcategorys rrz%StataValueLabel._prepare_value_labelsQs "8Bbh///8Bbh///  #  B$&qEHh,, x== ,33DLAA*/11  t~66H NN4= ) ) ) MMS]]Q. .MM MM"Q% HOOH % % % FFaKFFF8G284448F"(3331tv:%DF 2T]Br byteorderrEbytesc|j}t}d}|tj|dz|jt |jdd|}|dvrdnd}t||dz}||tdD]*}|tjd |+|tj|dz|j |tj|dz|j |j D]-}|tj|dz|.|jD]-} |tj|dz| .|jD]} || |z|S) a! Generate the binary representation of the value labels. Parameters ---------- byteorder : str Byte order of the output Returns ------- value_label : bytes Bytes containing the formatted value label iN )rutf8r?rc)rrwriterpackrrErr _pad_bytesranger r rrr getvalue) rrrbio null_byterlab_lenroffsetrtexts rgenerate_value_labelz$StataValueLabel.generate_value_labelws>ii  &+i#otx88999dl##CRC(//99 (999""sWgk22 'q 3 3A IIfk#y11 2 2 2 2 &+i#otv66777 &+i#ot}==>>>h < .s !r)key)ryrrsorteditemsrr)rrrrs rrzStataNonCatValueLabel.__init__sq / / /DEE E !"    nn    ""$$$$$rNr+)rrErr4rrrFr)r-r.r/r0rr1rrr3r3s<  "1: %%%%%%%rr3ceZdZUdZiZded<dZded<eD]-Zdee<edd D]Z de d e zzee ez<.d Z d ed <e j dddZded<ed D]zZ e j de dZdee<e dkreexxe d e zz cc<e j de jdedezZe jdeZ {dZd ed<e j dddZed D]zZ e j dedZdee<e dkreexxe d e zz cc<e j de jdedezZe jdeZ{ddde j de de j deddZded<d0d"Zed1d$Zed2d%Zd1d&Zd1d'Zd3d+Zed4d.Zd/S)5ra An observation's missing value. Parameters ---------- value : {int, float} The Stata missing value code Notes ----- More information: Integer missing values make the code '.', '.a', ..., '.z' to the ranges 101 ... 127 (for int8), 32741 ... 32767 (for int16) and 2147483621 ... 2147483647 (for int32). Missing values for floating point data types are more complex but the pattern is simple to discern from the following table. np.float32 missing values (float in Stata) 0000007f . 0008007f .a 0010007f .b ... 00c0007f .x 00c8007f .y 00d0007f .z np.float64 missing values (double in Stata) 000000000000e07f . 000000000001e07f .a 000000000002e07f .b ... 000000000018e07f .x 000000000019e07f .y 00000000001ae07f .z r4MISSING_VALUES)er bases.r?`r float32_basez)rrrrrrrrrFrc||_|dkrt|nt|}|j||_dS)Nl)_valuerrr;_strrrs rrzStataMissingValue.__init__s; #j00E eEll'. rrEc|jS)z The Stata representation of the missing value: '.', '.a'..'.z' Returns ------- str The representation of the missing value. )rJrs rstringzStataMissingValue.strings yrc|jS)z The binary representation of the missing value. Returns ------- {int, float} The binary representation of the missing value. )rIrMs rrzStataMissingValue.value's {rc|jSN)rNrMs r__str__zStataMissingValue.__str__3s {rc,t|d|dS)N(r)typerMs r__repr__zStataMissingValue.__repr__6st**&&t&&&&rotherrvrc|t|t|o|j|jko|j|jkSrQ)rrUrNr)rrWs r__eq__zStataMissingValue.__eq__9s< ud4jj ) ) * u|+ * ek) rrLnp.dtypecn|jtjur|jd}n|jtjur|jd}nr|jtjur|jd}nQ|jtjur|jd}n0|jtjur|jd}ntd|S)NrrrrrzUnsupported dtype) rUrkrrrrrrry)clsrLrs rget_base_missing_valuez(StataMissingValue.get_base_missing_value@s : +F3EE Z28 # #+G4EE Z28 # #+G4EE Z2: % %+I6EE Z2: % %+I6EE011 1 rN)rrrFrrFrE)rFr)rWrvrFr)rLrZrFr)r-r.r/r0r;__annotations__r?br#rchrrDrrrEr7r! int_valuerF increment_64rrpropertyrNrrRrVrY classmethodr]r1rrrrs\""J(*N))))+E++++ 66qq" 6 6A$'##b1f++$5N1q5 ! ! 6.L----% d,?@@CLCCCC U2YY44fmD,//2!s q55 3   33rAv;; .   !FM$  D#(>(>??B\Q "v{433 =L==== 6=&IJJ1ML U2YY33fmD,//2!s q55 3   33rAv;; .   !FM#{v{4'='=>>qALP "v{3 22  6=|44Q7 6=|44Q7 ""////    X    X ''''       [   rrceZdZddZdS) StataParserrFrc tdtddDdtjtjfdtjtjfdtjtjfdtjtjfdtjtjfgz|_ tjtj tjtjtjtjtjtjtjtjtjtjd |_ tttdtd z|_d d d dddd |_d}d}d}d}dddtjt!jd|dtjt!jd|dftjt!jd|dtjt!jd|dfd|_dddtjt!jd|dtjt!jd|dftjt!jd|dtjt!jd|dfd|_dddddd|_d d!d"tjt!jdd#dtjt!jdd$dd|_d%d&d'd(d)d*d+|_hd,|_dS)-Nc@g|]}|tjd|fS)rf)rkrL).0rs r z(StataParser.__init__..cs- ; ; ;a'a''"" # ; ; ;rr?)bhlfdQrPrlhr`srsr)rr)rr)rrrrr)r`r{rzrrP)i~)ii)ii)bilfrr<r=r>rCri1i2i4f4f8u8)r`r{rzrrPry><str#_N_b_ndoifin_pi_rc_seendforrNULL_allbytecaseelseenumgotolongquadstrLwith_coef_cons_pred_skiprmbreakcatchclassconstrlocalshortusingdeletedoubleexportfriendglobalinlinepragmabooleancomplexdefaulttypedefvirtualcontinuedelegateexplicitexternalfunctiontypename aggregate colvector eltypedef protected rowvector)dictr#rkrLrrrrr DTYPE_MAPr DTYPE_MAP_XMLlisttupleTYPE_MAP TYPE_MAP_XMLrr VALID_RANGEOLD_VALID_RANGEOLD_TYPE_MAPPINGr;NUMPY_TYPE_MAPRESERVED_WORDS)r float32_minr float64_minrs rrzStataParser.__init__Rs`  ; ;U1c]] ; ; ;bhrw''(bhrx(()bhrx(()bhrz**+bhrz**+     8BH%%8BJ''8BJ''8BH%%8BH%%8BG$$ 3 3 U5::..w?@@   * ) 9 9  * 6={;;A>?? 6={;;A>??  6={;;A>?? 6={;;A>??    * 6={;;A>?? 6={;;A>??  6={;;A>?? 6={;;A>??  ! ! FM$0CDDQGHH d$GHHK I I    = = = rNr,)r-r.r/rr1rrrgrgQs.h h h h h h rrgzpandas.api.typingceZdZUeZded< dddefd ZdfdZdfdZdgdZ dhd&Z dfd'Z did)Z did*Z did+Zdid,Zdid-Zdid.Zdid/Zdid0Zdjd2Zdkd5Zdfd6Zdfd7Zdld:Zdmd<Zdmd=Zdmd>Zdmd?Zdid@ZdndBZdndCZdidDZ dodFZ!dpdHZ"dqdJZ#dfdKZ$dfdLZ%dfdMZ&dfdNZ'drdPZ(dsdtdRZ) dudvdUZ*dwdWZ+dxdXZ,dydZZ-dzd^Z.e/dnd_Z0e/dnd`Z1d{dbZ2d|dcZ3xZ4S)} StataReaderz IO[bytes] _path_or_bufTNFinfer path_or_bufFilePath | ReadBuffer[bytes] convert_datesrconvert_categoricals index_col str | Noneconvert_missingpreserve_dtypescolumnsSequence[str] | Noneorder_categoricals chunksize int | None compressionr.r5StorageOptions | NonerFrc t||_||_||_||_||_||_||_||_ | |_ | |_ d|_ | |_ d|_d|_|j d|_ n*t!| t"r| dkrt%dd|_d|_i|_d|_d|_d|_t3t4j|_dS)NrFr?rz.chunksize must be a positive integer when set.)superr_convert_dates_convert_categoricals _index_col_convert_missing_preserve_dtypes_columns_order_categoricals_original_path_or_buf _compression_storage_optionsr _chunksize_using_iterator_enteredrrry _close_file_column_selector_set_value_label_dict_value_labels_read_dtype _lines_read_set_endiannesssysr_native_byteorder) rrrrrrrrrrrr5 __class__s rrzStataReader.__init__s  ,%9"# / / #5 %0"' /#$ ? "DOOIs++ OyA~~MNN N7;$)!<>"''+ !0!?!?rcRt|ds|dSdS)zK Ensure the file has been opened and its header data read. rN)hasattr _open_filerMs r _ensure_openzStataReader._ensure_open2s6t^,,  OO       rc4|js(tjdtt t |jd|jd|j}t|j dr2|j r|j |_ |j |_nV|5t|j |_ dddn #1swxYwY|j j |_||dS)z^ Open the file (with compression options, etc.), and read header information. zStataReader is being used without using a context manager. Using StataReader as a context manager is the only supported method.r`rbF)r5is_textrseekableN)rrtruResourceWarningrr(rrrrhandlerrcloserrread _read_header _setup_dtype)rhandless rrzStataReader._open_file9sm}  MW+--        &  1)     7>: . . 77>3J3J3L3L 7 'D &}D   C C$+GN,?,?,A,A$B$B! C C C C C C C C C C C C C C C#06D   s,CCCr cd|_|S)zenter context managerT)rrMs r __enter__zStataReader.__enter__Xs  rexc_typetype[BaseException] | None exc_valueBaseException | None tracebackTracebackType | Nonec@|jr|dSdSrQ)r)rr r rs r__exit__zStataReader.__exit__]s1             rc<|jdkr d|_dSd|_dS)zC Set string encoding which depends on file version vrrN)_format_versionrrMs r _set_encodingzStataReader._set_encodingfs(  # % %&DNNN$DNNNrrchtjd|jddS)Nr`r?rrrrrrMs r _read_int8zStataReader._read_int8o*}S$"3"8"8";";<<rre r  rr?)+rrrrry_version_errorrrr!r"r&_nvar _get_nobs_nobs_get_data_label _data_label_get_time_stamp _time_stampr._seek_vartypes_seek_varnames_seek_sortlist _seek_formats_seek_value_label_names_get_seek_variable_labels_seek_variable_labels_data_location _seek_strls_seek_value_labels _get_dtypes_typlist _dtyplistseek _get_varlist_varlistr4_srtlist _get_fmtlist_fmtlist _get_lbllist_lbllist_get_variable_labels_variable_labelsrMs rr7zStataReader._read_new_headers r""""4#4#9#9!#<#<==   6 6^224;O2PPQQ Q  r"""!%!2!7!7!:!:f!D!D### r"""#'#73#>#>D     DDUDUDWDW  q!!!^^%%  r"""//11 r"""//11 r""" q!!! q!!!"..0025"..0025"..0025!--//!3'+'7'7'9'9B'>$&*%C%C%E%E" q!!!"..0014++--1"&"2"2"4"4r"9(,(8(89L(M(M% t~ t2333))++  t2333..tzA~>>ssC  t1222))++  t;<<<))++  t9::: $ 9 9 ; ;r seek_vartypes,tuple[list[int | str], list[str | np.dtype]]c|j|g}g}t|jD]}|}|dkr8|||t |T ||j|||j|#t$r}td|d|d}~wwxYw||fS)Ncannot convert stata types []) rrar#rMr"rrErrKeyErrorry)rrktyplistdtyplist_typerrs rr^zStataReader._get_dtypess }---tz"" U UA##%%Cd{{s###C))))UNN4#4S#9:::OOD$6s$;<<<<UUU$%JC%J%J%JKKQTTU  sAC  C,C''C, list[str]cfjdkrdndfdtjDS)Nr!cjg|]/}j0Sr1_decoderrrjrtr`rs rrkz,StataReader._get_varlist..6SSSA T.33A6677SSSrrr#rMrr`s`@rrbzStataReader._get_varlistsA&,,BB#SSSSStzARARSSSSrcjdkrdnjdkrdnjdkrdndfdtjDS) Nr9q1hrTrecjg|]/}j0Sr1r|r~s rrkz,StataReader._get_fmtlist..rrrrs`@rrezStataReader._get_fmtlistso  3 & &AA  !C ' 'AA  !C ' 'AAASSSSStzARARSSSSrcjdkrdnjdkrdndfdtjDS)NrrzrryrIcjg|]/}j0Sr1r|r~s rrkz,StataReader._get_lbllist..rrrrs`@rrgzStataReader._get_lbllistsZ  3 & &AA  !C ' 'AAASSSSStzARARSSSSrcjdkr!fdtjD}nLjdkr!fdtjD}n fdtjD}|S)Nrcjg|]/}jd0S)iAr|rjrtrs rrkz4StataReader._get_variable_labels..sC>? T.33C8899rr~cjg|]/}jd0S)Qr|rs rrkz4StataReader._get_variable_labels..C=> T.33B7788rcjg|]/}jd0S)rr|rs rrkz4StataReader._get_variable_labels.. rrr)rvlblists` rriz StataReader._get_variable_labelss  3 & &CHCTCTGG !C ' 'BG BSBSGGBG BSBSGrc|jdkr|S|jdkr|S|S)Nrg)rr(r&r"rMs rrNzStataReader._get_nobssT  3 & &$$&& &  !S ( ($$&& &$$&& &rrEc|jdkrA|}||j|S|jdkrA|}||j|S|jdkr-||jdS||jdS)Nrr<r~rr)rr"r}rrrrstrlens rrPzStataReader._get_data_labels  3 & &&&((F<< 1 6 6v > >?? ?  !S ( (__&&F<< 1 6 6v > >?? ?  !C ' '<< 1 6 6r : :;; ;<< 1 6 6r : :;; ;rc|jdkrA|}|j|dS|jdkrA|}||j|S|jdkr-||jdSt )Nrrr<r)rrrrdecoder}ryrs rrRzStataReader._get_time_stamp"s  3 & &__&&F$))&1188AA A  !S ( (__&&F<< 1 6 6v > >?? ?  !C ' '<< 1 6 6r : :;; ; rc|jdkr2|jd|jd|jzzdzdzS|jdkr|dzSt )Nr<r ryr)rrrrXrMr.ryrMs rrYz%StataReader._get_seek_variable_labels.sr  3 & &   " "1 % % %/2 ?CbH2M M  !S ( (##%%* * rr9ct|d_jdvr-ttjdkrdnd__j d _ __jdkr_jdkr*d j j D}nj j }t'j|t&j }g}|D]D}|jvr!|j|,||d z E fd |D_nE#t$r8}d d|D}td|d|d}~wwxYw fd|D_nE#t$r8}d d|D}td|d|d}~wwxYwjdkr&fdt7j D_n%fdt7j D_j dzdd__ !_"#_$jdkrk } jdkr%} n&} | dkrnj | jj '_(dS)Nr) rrrr~rnorrsr>r?rArBr~rc,g|]}t|Sr1)rrjrs rrkz0StataReader._read_old_header..\sJJJ!s1vvJJJrrKc*g|]}j|Sr1)rrjrurs rrkz0StataReader._read_old_header..hs CCCCT]3/CCCr,c,g|]}t|Sr1rErjrs rrkz0StataReader._read_old_header..js%>%>%>c!ff%>%>%>rrorpc*g|]}j|Sr1)rrs rrkz0StataReader._read_old_header..ms EEEcdnS1EEErc,g|]}t|Sr1rrs rrkz0StataReader._read_old_header..os&?&?&?!s1vv&?&?&?rzcannot convert stata dtypes [rcjg|]/}jd0S)ryr|rs rrkz0StataReader._read_old_header..ssC=> T.33B7788rcjg|]/}jd0S)rIr|rs rrkz0StataReader._read_old_header..wsC<= T.33A6677rrKr))rrryrLrrrr! _filetyperrr"rMrNrOrPrQrRrSrk frombufferrrrr_joinr`r#rcr4rdrerfrgrhrirjr,r*tellr[) rr9rrbuftyplistbtprv invalid_typesinvalid_dtypes data_typedata_lens ` rr8zStataReader._read_old_header:s@":a=11   ( ^224;O2PPQQ Q  "&!2!2c!9!9##s** q!!!&&(( ^^%% //11  3 & &#3355D   3 & &JJt'8'='=dj'I'IJJJGG#((44C}S999HG - -...NN4#8#<====NN28,,,, WCCCC7CCCDMM W W WHH%>%>g%>%>%>??MLMLLLMMSV V W YEEEEWEEEDNN Y Y Y XX&?&?w&?&?&?@@NN^NNNOOUX X Y  # % %BG BSBSDMMAFtzARARDM..tzA~>>ssC ))++ ))++ $ 9 9 ; ;  # % % 1 OO-- '#--#//11HH#//11H>>!&&x000 1#/4466s0'G;; H=3H88H=I J3JJrZcj|j|jSg}t|jD]o\}}||jvrDt t |}|d||j|j|fR|d|d|fptj ||_|jS)z"Map between numpy and state dtypesNrhrf) rrr_rr rErr!rkrL)rdtypesrrus rrzStataReader._setup_dtypes ; ";  .. 4 4FAsd)))3nn w1ww4?(VD,,A %;;&w/A77#s**!&&q)))I$ *rc|jJ|j|jjz}|j|j|z |jdsdS|jdtj| }| |jd}|jdtj |jd|z|j d|}i|j|<t|D]C}| |jd |j|||<D5) zEReads value labels with fixed-length strings (105 and earlier format)NTrZrIr?rrr )rrOrrrar[rosSEEK_CURr"r}rkrr!rr#)rr(r rcodesrs r_read_old_value_labelsz"StataReader._read_old_value_labelssl{&&&dk22 t2V;<<< $))!,,    " "2r{ 3 3 3!!##All4#4#9#9!#<#<==G   " "1 % % %M!&&q1u--5K5K5KSTE/1D "7 +1XX  <@LL%**1--==&w/a99 rc||jrdS|jdkr|n|d|_dS)NrT)rrrrrrMs r_read_value_labelszStataReader._read_value_labelssg   "  F  3 & &  ' ' ) ) ) )  ' ' ) ) )"&rc|j|jddi|_ |jddkrdS|jdkr|}n|jd}|jdkrd nd}|jd kr|d ||d d|z z}n|d |z d |d |zdz}tj |jd |d }| }| }|j|}|dkr#|d d |j }nt|}||jt|<^)N0rTrsGSOr<rTrrZrBrrWryrK)rrar\GSOrrr(r!rrrr&rrrE)rv_orv_sizerulengthva decoded_vas r _read_strlszStataReader._read_strlss t/0009 , %%a((F22#s**''))',,R00"2c99q?c))ah-#a2;.?*@@CCa&j1n-QZNN0CCCmt$9$9$93??B""$$C&&((F"''//Bczz"X__T^<< !WW !+DHSXX 1 ,rr#cFd|_||jS)NTnrows)rrrrMs r__next__zStataReader.__next__,s #yyty///rsizec@||j}||S)a Reads lines from Stata file and returns as dataframe Parameters ---------- size : int, defaults to None Number of lines to read. If None, reads whole file. Returns ------- DataFrame Nr)rr)rrs r get_chunkzStataReader.get_chunk0s$ <?Dyyty$$$rr bool | Nonec n |||j}||j}||j}||j}||j}||j}||j}||j}|jdkr|dkrt|j } t| j D]U\} } |j | } t| tjr)| jdkr| | | | | <V||| |} | S|jdkr|js||jJ|j} |j|jz | jz}|| jz}t5||}|dkr|r|t8|j| jz}|j|j|zt5||j|jz }tj |j!|| |}|xj|z c_|j"|j#kr>|$%|j&}|r|tO|dkrt|j } n-tj(|} tS|j | _ |"tU|j|z |j| _+||| |} tY| |j-dD]=\} }t|t\r#| | /|j0| | <>|1| } d t|j D}tjtd}|D]a}| j3dd|fj} | ||j |fvr8| 4|| j3dd|f| b|5| |} |rmt|j6D]X\} tofd tpDr3| 4| ts| j3dd| fY|r"|:| |j;|j<|} |sEg}d }| D]} | | j} | tjtj=tjtj>fvr!tjtj?} d}n{| tjtj@tjtjAtjtjBfvr tjtjC} d}|D| | | | f|r!tjEt|} |(| G| H|} | S) a Reads observations from Stata file, converting them into a dataframe Parameters ---------- nrows : int Number of lines to read from data file, if None read whole file. convert_dates : bool, default True Convert date variables to DataFrame time values. convert_categoricals : bool, default True Read value labels and convert columns to Categorical/Factor variables. index_col : str, optional Column to set as index. convert_missing : bool, default False Flag indicating whether to convert missing values to their Stata representations. If False, missing values are replaced with nan. If True, columns containing missing values are returned with object data types and missing values are represented by StataMissingValue objects. preserve_dtypes : bool, default True Preserve Stata datatypes. If False, numeric data are upcast to pandas default types for foreign data (float64 or int64). columns : list or None Columns to retain. Columns will be returned in the given order. None returns all columns. order_categoricals : bool, default True Flag indicating whether converted categorical data are ordered. Returns ------- DataFrame Nr)rrfr<rTstrictcg|] \}}|| SrQr1)rjrdtyps rrkz$StataReader.read..s!WWWgadFVFVFVFVrc3BK|]}|VdSrQ)rj)rjdate_fmtrDs r z#StataReader.read..s/NNHs~~h//NNNNNNrF)IrrrrrrrrrOr#rcrrr`rrkrLcharrp_do_select_columnsrrrrrrrr StopIterationrrar[rrr!rbyteswaprw newbyteorderr from_recordsr$r%rNzipr_rrr} _insert_strlsrvilocisetitem_do_convert_missingrfrr _date_formatsr_do_convert_categoricalsrrhfloat16rrrrrrsr from_dictr set_indexpop)rrrrrrrrrrrrrrL max_read_lenread_lenr( read_linesraw_dataru valid_dtypes object_typeidx retyped_dataconvertrDs @rrzStataReader.readAsDV    /M  '#'#=  ""3O  ""3O ?mG  %!%!9   I =JE J!OO!T]333D#DL11 9 93^A&b"(++9w#~~$(I$4$4R$8$8S "..tW==K  C ' '$2I '      {&&&  T%55G 5>)x.. q==$ *''))) !EN2 t2V;<<< T-= =>> =   " "8 , ,E    J& ?d4 4 4((**//0K0K0M0MNNH  &  # # % % % x==A  T]333DD)(33D //DL  # :-t/?DJ  **499DD$-=== : :HC#s## : IOODL99S !!$''XW4>)B)BWWW hv&&  D DCIaaaf%+E[$.*=>>> c49QQQV#4#;#;E#B#BCCC''o>>  #DM22  3NNNN NNNNNMM>tyAPSTT  00d,dm=OD ?LG D DS RXbj1128BJ3G3GHHHHRZ00E"GGHRW%%HRX&&HRX&& HRX..E"G##S$s)*:*:5*A*A$BCCCC ? *4 +=+=>>  >>$((9"5"566D rrc<td}i}tt|jD]*}|j|}|jdkrB|dkr<|jdd|f||j d|jdd|f<|jdkr0||j vrrtt|}|j |\}}n/||j vrtt|}|j |\}}|jdd|f} | j} | |k| |kz} | s|rt!jt!j| d} t!j| | d\} }t)| t*}t-| D]]\}}|jdkr(t/t|j |}nt/|}| ||k}||j|<^nR| j}|t jt jfvr t j}t)| |}t j|j| <|||<,|r0|D]\}}||||S) Nz 0x1.0p333r~rPrrT)return_inverserK)rfromhexr#rrr_rrreplacer;rr rErrnrrrknonzeroruniquer&rvrrrLrrnanr9r)rrrold_missingdouble replacementsrrDnminnmaxseriessvalsmissing missing_locumissing umissing_loc replacementjumrrrLrrs rrzStataReader._do_convert_missings!MM+66 s4<(())3 *3 *A-"C#s**sczz"&)AAAqD/"9"9%t':3'?## !!!Q$#s**d2223nn!1#6 ddd...3nn!-c2 dYqqq!t_FNEt| 5G;;==  6 jG)<)<==a@ )+6'?SW)X)X)X&,$V6::: &x00 : :EAr+s22(9!$"5c":;;)) ):"(=(= %la&78C,9K$S)) : RZ 888JE$V5999 02v #G,)LOO  **0022 * * U c5)))) rctdrtjdkr|StjD]=\}}|dkr ||fd|jdd|fD>|S)NrrrycDg|]}jt|Sr1)rrE)rjkrs rrkz-StataReader._insert_strls..9s&HHH1dhs1vv.HHHr)rrrrr_rr)rrrrus` rrzStataReader._insert_strls2stU## s48}}'9'9K .. J JFAsczz MM!HHHH !!!Q$HHH I I I I r Sequence[str]c|jsXt|}t|t|krtd||j}|r4dt|}td|g}g}g}g} |D]} |j| } | |j | | |j | | |j | | |j | ||_ ||_ ||_ | |_ d|_||S)Nz"columns contains duplicate entriesz, z>&--bl;;;;&--h7777 8"&biikk!2!2J3 (99*EEHH!333 777DDFFB$("q&)9$:$:M- -0H0HHG       C%S//s2!3$$HDJUKKK "))3 *;<<<<"))3S *:;;;;011>>> sE G(A2GGc8||jS)aO Return data label of Stata file. The data label is a descriptive string associated with the dataset stored in the Stata file. This property provides access to that label, if one is present. See Also -------- io.stata.StataReader.variable_labels : Return a dict associating each variable name with corresponding label. DataFrame.to_stata : Export DataFrame object to Stata dta format. Examples -------- >>> df = pd.DataFrame([(1,)], columns=["variable"]) >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21) >>> data_label = "This is a data file." >>> path = "/My_path/filename.dta" >>> df.to_stata( ... path, ... time_stamp=time_stamp, # doctest: +SKIP ... data_label=data_label, # doctest: +SKIP ... version=None, ... ) # doctest: +SKIP >>> with pd.io.stata.StataReader(path) as reader: # doctest: +SKIP ... print(reader.data_label) # doctest: +SKIP This is a data file. )rrQrMs r data_labelzStataReader.data_labels> rc8||jS)z2 Return time stamp of Stata file. )rrSrMs r time_stampzStataReader.time_stamps rdict[str, str]c||tt|j|jdS)aP Return a dict associating each variable name with corresponding label. This method retrieves variable labels from a Stata file. Variable labels are mappings between variable names and their corresponding descriptive labels in a Stata dataset. Returns ------- dict A python dictionary. See Also -------- read_stata : Read Stata file into DataFrame. DataFrame.to_stata : Export DataFrame object to Stata dta format. Examples -------- >>> df = pd.DataFrame([[1, 2], [3, 4]], columns=["col_1", "col_2"]) >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21) >>> path = "/My_path/filename.dta" >>> variable_labels = {"col_1": "This is an example"} >>> df.to_stata( ... path, ... time_stamp=time_stamp, # doctest: +SKIP ... variable_labels=variable_labels, ... version=None, ... ) # doctest: +SKIP >>> with pd.io.stata.StataReader(path) as reader: # doctest: +SKIP ... print(reader.variable_labels()) # doctest: +SKIP {'index': '', 'col_1': 'This is an example', 'col_2': ''} >>> pd.read_stata(path) # doctest: +SKIP index col_1 col_2 0 0 1 2 1 1 3 4 Tr)rrrrcrjrMs rvariable_labelszStataReader.variable_labelss9L C t'>> df = pd.DataFrame([[1, 2], [3, 4]], columns=["col_1", "col_2"]) >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21) >>> path = "/My_path/filename.dta" >>> value_labels = {"col_1": {3: "x"}} >>> df.to_stata( ... path, ... time_stamp=time_stamp, # doctest: +SKIP ... value_labels=value_labels, ... version=None, ... ) # doctest: +SKIP >>> with pd.io.stata.StataReader(path) as reader: # doctest: +SKIP ... print(reader.value_labels()) # doctest: +SKIP {'col_1': {3: 'x'}} >>> pd.read_stata(path) # doctest: +SKIP index col_1 col_2 0 0 1 2 1 1 x 4 )rrrrMs rrzStataReader.value_labelss+L& &  # # % % %%%r) TTNFTNTNrN)rrrrrrrrrrrrrrrrrrrr.r5rrFrr,)rFr )r r r rrrrFr)rFr)rFr)r1rrFr2)rkrrFrl)rFrwr^)r9rrFr)rFrZ)rhrrFrE)rFr#rQ)rrrFr#)NNNNNNNN)rrrrrrrrrrrrrrrrrFr#)rr#rrrFr#rr#rFr#)rr#rrrFr#) rr#r'r(r&rrrrFr#)rFr>)rFr()5r-r.r/_stata_reader_docr0r_rrrr rrrrr"r&r(r*r,r.r0r4rr7r^rbrergrirNrPrRrYr8rr}rrrrrrrrrrrrdr;r=r@r __classcell__rs@rrrssG #%) $ % $(,#' $*115-@-@-@-@-@-@-@^> %%%%@@@@@@@@RRRRRRRRRRRRRRRRRRRRRRRR@@@@    ....5<5<5<5`_. Returns ------- DataFrame, pandas.api.typing.StataReader If iterator or chunksize, returns StataReader, else DataFrame. See Also -------- io.stata.StataReader : Low-level reader for Stata data files. DataFrame.to_stata: Export Stata data files. Notes ----- Categorical variables read through an iterator may not have the same categories and dtype. This occurs when a variable stored in a DTA file is associated to an incomplete set of value labels that only label a strict subset of the values. Examples -------- Creating a dummy stata for this example >>> df = pd.DataFrame( ... { ... "animal": ["falcon", "parrot", "falcon", "parrot"], ... "speed": [350, 18, 361, 15], ... } ... ) # doctest: +SKIP >>> df.to_stata("animals.dta") # doctest: +SKIP Read a Stata dta file: >>> df = pd.read_stata("animals.dta") # doctest: +SKIP Read a Stata dta file in 10,000 line chunks: >>> values = np.random.randint( ... 0, 10, size=(20_000, 1), dtype="uint8" ... ) # doctest: +SKIP >>> df = pd.DataFrame(values, columns=["i"]) # doctest: +SKIP >>> df.to_stata("filename.dta") # doctest: +SKIP >>> with pd.read_stata('filename.dta', chunksize=10000) as itr: # doctest: +SKIP >>> for chunk in itr: ... # Operate on a single chunk, e.g., chunk.mean() ... pass # doctest: +SKIP ) rrrrrrrrr5rN)rr) rHrrrrrrrrrGrr5readers r read_statarL)sB#1''-'   F9 {{}}sAA A endiannessc|dvrdS|dvrdStd|d)N)rBlittlerB)rAbigrAz Endianness ri)lowerry)rMs rrrsT_,,s     | + +sBzBBBCCCrrr rrct|tr|d|t|z zzS|d|t|z zzS)zQ Take a char string and pads it with null bytes until it's length chars. r)rrrrrs rr"r"sL$5g#d))!3444 &FSYY./ //rrZcl|dvrtjtjStd|d)zK Convert from one of the stata date formats to a type in TYPE_MAP. )rIr6rOr8rcr:rSr;rVr<rYr=r\r>rz not implemented)rkrLrNotImplementedError)rDs r_convert_datetime_to_stata_typerWsD  x ###!"AC"A"A"ABBBrrvarlistlist[Hashable]ci}|D]t\}}|dsd|z||<||vr|||||<Et|tst d||||<u|S)N%z0convert_dates key must be a column or an integer)r9rjrNrrry)rrXnew_dictr7rs r_maybe_convert_to_int_keysr]sH#))++// U$$ -!$uM#  '>>+8+=HW]]3'' ( (c3'' U !STTT)#.HSMM OrrLr2c|jtjur1tt |j}t |dS|jtjurdS|jtjurdS|jtj urdS|jtj urdS|jtj urdStd|d) a Convert dtype types to stata types. Returns the byte of the given ordinal. See TYPE_MAP and comments for an explanation. This is also explained in the dta spec. 1 - 244 are strings of this length Pandas Stata 251 - for int8 byte 252 - for int16 int 253 - for int32 long 254 - for float32 float 255 - for double double If there are dates to convert, then dtype will already have the correct type inserted. r?rqrprornrm Data type  not supported. rUrkobject_rrrnrrrrrrrV)rLr2rs r_dtype_to_stata_typercs" zRZ( fn(E(EFF8Q rz ! !s rz ! !s rx  s rx  s rw  s!"Eu"E"E"EFFFrr dta_version force_strlc |dkrd}nd}|rdS|jtjur~tt |j}||kr4|dkrdSt t|j dtt|dzdzS|tj krdS|tj krd S|tjkrd S|tjtjfvrd St#d |d )a Map numpy dtype to stata's default format for this type. Not terribly important since users can change this in Stata. Semantics are object -> "%DDs" where DD is the length of the string. If not a string, raise ValueError float64 -> "%10.0g" float32 -> "%9.0g" int64 -> "%9.0g" int32 -> "%12.0g" int16 -> "%8.0g" int8 -> "%8.0g" strl -> "%9s" r<rnz%9sr[r?rhz%10.0gz%9.0gz%12.0gz%8.0gr_r`)rUrkrbrrrnryrrrrErrrrrrrV)rLr2rdre max_str_lenrs r_dtype_to_default_stata_fmtri s&S   5 zRZ' fn(E(EFF k ! !c!!u !>!E!Efk!R!RSSSSXq))***S00 "*  x "*  w "(  x 27BH% % %w!"Eu"E"E"EFFFrc^eZdZUdZdZdZded< dKdd dLfd ZdMd#ZdNd&Z dOd(Z dPd)Z dPd*Z dQd+Z dRd-ZdPd.ZdSd1ZdTd2ZdQd3ZdQd4ZdQd5ZdQd6ZdQd7ZdQd8ZdQd9ZdQd:ZdQd;Z dUdVd<ZdQd=ZdQd>ZdQd?ZdQd@ZdQdAZ dQdBZ!dPdCZ"dWdEZ#dXdGZ$e%dYdIZ&dZdJZ'xZ(S)[ StataWritera A class for writing Stata binary dta files Parameters ---------- fname : path (string), buffer or path object string, pathlib.Path or object implementing a binary write() functions. If using a buffer then the buffer will not be automatically closed after the file is written. data : DataFrame Input to save convert_dates : dict Dictionary mapping columns containing datetime types to stata internal format to use when writing the dates. Options are 'tc', 'td', 'tm', 'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name. Datetime columns that do not have a conversion type specified will be converted to 'tc'. Raises NotImplementedError if a datetime column has timezone information write_index : bool Write the index to Stata dataset. byteorder : str Can be ">", "<", "little", or "big". default is `sys.byteorder` time_stamp : datetime A datetime to use as file creation date. Default is the current time data_label : str A label for the data set. Must be 80 characters or smaller. variable_labels : dict Dictionary containing columns as keys and variable labels as values. Each label must be 80 characters or smaller. compression : str or dict, default 'infer' For on-the-fly compression of the output data. If 'infer' and 'fname' is path-like, then detect compression from the following extensions: '.gz', '.bz2', '.zip', '.xz', '.zst', '.tar', '.tar.gz', '.tar.xz' or '.tar.bz2' (otherwise no compression). Set to ``None`` for no compression. Can also be a dict with key ``'method'`` set to one of {``'zip'``, ``'gzip'``, ``'bz2'``, ``'zstd'``, ``'xz'``, ``'tar'``} and other key-value pairs are forwarded to ``zipfile.ZipFile``, ``gzip.GzipFile``, ``bz2.BZ2File``, ``zstandard.ZstdCompressor``, ``lzma.LZMAFile`` or ``tarfile.TarFile``, respectively. As an example, the following could be passed for faster compression and to create a reproducible gzip archive: ``compression={'method': 'gzip', 'compresslevel': 1, 'mtime': 1}``. storage_options : dict, optional Extra options that make sense for a particular storage connection, e.g. host, port, username, password, etc. For HTTP(S) URLs the key-value pairs are forwarded to ``urllib.request.Request`` as header options. For other URLs (e.g. starting with "s3://", and "gcs://") the key-value pairs are forwarded to ``fsspec.open``. Please see ``fsspec`` and ``urllib`` for more details, and for more examples on storage options refer `here `_. value_labels : dict of dicts Dictionary containing columns as keys and dictionaries of column value to labels as values. The combined length of all labels for a single variable must be 32,000 characters or smaller. Returns ------- writer : StataWriter instance The StataWriter instance has a write_file method, which will write the file to the given `fname`. Raises ------ NotImplementedError * If datetimes contain timezone information ValueError * Columns listed in convert_dates are neither datetime64[ns] or datetime * Column dtype is not representable in Stata * Column listed in convert_dates is not in DataFrame * Categorical label contains more than 32,000 characters Examples -------- >>> data = pd.DataFrame([[1.0, 1]], columns=["a", "b"]) >>> writer = StataWriter("./data_file.dta", data) >>> writer.write_file() Directly write a zip file >>> compression = {"method": "zip", "archive_name": "data_file.dta"} >>> writer = StataWriter("./data_file.zip", data, compression=compression) >>> writer.write_file() Save a DataFrame with dates >>> from datetime import datetime >>> data = pd.DataFrame([[datetime(2000, 1, 1)]], columns=["date"]) >>> writer = StataWriter("./date_data_file.dta", data, {"date": "tw"}) >>> writer.write_file() rgrrrNTrrfnameFilePath | WriteBuffer[bytes]rr#rdict[Hashable, str] | None write_indexrrrr=datetime | Noner;r@rr.r5rr'dict[Hashable, dict[float, str]] | NonerFrc t||_|in||_||_||_||_||_| |_g|_ tj gt|_ | |_d|_i|_||| |_| t&j}t+||_||_tjtjtjd|_dS)NrK)rornrm)rrrr _write_indexrSrQrj_non_cat_value_labels _value_labelsrkrmr_has_value_labelsr _output_file_converted_names_prepare_pandasr5rrrr!_fnamerrrtype_converters) rrmrrrprr=r;r@rr5rrs rrzStataWriter.__init__ s  $1$9bb}'%% /%1"46!#"D!9!9!9'.257 T""".   I))44 %'XBH27KKrto_writerEct|jj||jdS)zS Helper to call encode before writing to file for Python 3 compat. N)rrr rr)rr}s r_writezStataWriter._write s1 !!(//$."A"ABBBBBrrrcD|jj|dS)z? Helper to assert file is open before writing. N)rrr rKs r _write_byteszStataWriter._write_bytes s# !!%(((((rlist[StataNonCatValueLabel]cg}|j|S|jD]\}}||jvr|j|}n,||jvrt |}nt d|dt ||jstd|dt|||j }| ||S)zc Check for value labels provided for non-categorical columns. Value labels NzCan't create value labels for z!, it wasn't found in the dataset.z6, value labels can only be applied to numeric columns.) rur9ryrrErqrrLryr3rr)rrnon_cat_value_labelsrlabelscolnamesvls r_prepare_non_cat_value_labelsz)StataWriter._prepare_non_cat_value_labels s=?  % -' '#9??AA - -OGV$////8DL((g,,,W,,, $DM$788 !>W>>>(HHC ' ' , , , ,##rcBd|jD}t|s|S|xjtj|zc_t j}g}t||dD]\}}|rst|||j }|j |||j j j}|tjkrt!d||j j j} | ||kr|tjkrtjtj}nM|tjkrtjtj}ntjtj}tj| |} ||| | dk<| || f|| |||ft1jt5|S)z Check for categorical columns, retain categorical information for Stata file and convert categorical data to int c8g|]}t|tSr1)rr)rjrLs rrkz5StataWriter._prepare_categoricals.. s#OOO%*U$455OOOrTr)rzCIt is not possible to export int64-based categorical data to Stata.rKrK)rrrrwrkrmrr]rrrrvrrrrLrsryrnrrrrrrr#rr) rris_catr]data_formattedr col_is_catrrLrs r_prepare_categoricalsz!StataWriter._prepare_categoricals s PO4;OOO6{{ K "(6"2"22!2!I"4=== 8 8OC 8%d3i$.III"))#...S +1BH$$$Ac,499;;::<<#9#9%#@#@@@'' " 2 2"(** " 2 2 " 4 4XfE:::F(>'=e'D'Dv|$%%sFm4444%%sDI&67777"4#7#7888rc|D]r}||j}|tjtjfvrI|tjkr|jd}n |jd}|||||<s|S)z Checks floating point data columns for nans, and replaces these with the generic Stata for missing value (.) rrP)rLrkrrr;r)rrrrLrs r _replace_nanszStataWriter._replace_nans) sz  6 6AGMERZ000BJ&&"&"5c":KK"&"5c":Kq'..55Q rcdS)zNo-op, forward compatibilityNr1rMs r_update_strl_nameszStataWriter._update_strl_names: rrc|D]B}|dks|dkr4|dks|dkr(|dks|dkr|dkr||d}C|S)a Validate variable names for Stata export. Parameters ---------- name : str Variable name Returns ------- str The validated name with invalid characters replaced with underscores. Notes ----- Stata 114 and 117 support ascii characters in a-z, A-Z, 0-9 and _. AZazr9rt)r rrrs r_validate_variable_namez#StataWriter._validate_variable_name= sh( , ,ASAGGWWCWWCHH||As++ rci}t|j}|dd}d}t|D]\}}|}t|tst |}||}||jvrd|z}d|dcxkrdkrnnd|z}|dtt|d}||ksv| |dkrXdt |z|z}|dtt|d}|dz }| |dkX|||<|||<t||_|j r;t||d D](\} } | | kr|j | |j | <|j | =)|rg} | D]!\}}|d |} | | "td | } t%j| t(t+ ||_||S) a Checks column names to ensure that they are valid Stata column names. This includes checks for: * Non-string names * Stata keywords * Variables that start with numbers * Variables with names that are too long When an illegal variable name is detected, it is converted, and if dates are exported, the variable name is propagated to the date conversion dictionary Nrrtrrrr?Trz -> z r`)rrrrrErrrrr1r$rrr9rrrrrtrurrryr)rrconverted_namesroriginal_columnsduplicate_var_idrr orig_nameroconversion_warningrrs r_check_column_nameszStataWriter._check_column_names[ s02t|$$"111: ))  GAtIdC(( !4yy//55Dt***Tzd1g$$$$$$$$$Tz,#c$ii,,,-D9$$mmD))A--%5!6!66=D 4#c$ii"4"4 45D$)$ mmD))A-- .2 *GAJJW~~    /G%5dCCC / /166-1-@-CD'*+A.  !# #2#8#8#:#: / / 4"22D22"))#....!((7I)J)JKKB M!+--     !0 !!! rrr&c"g|_g|_|D]k\}}|jt ||j||jt ||j|ldSrQ)r%rrr9rrirrc)rrrrLs r_set_formats_and_typesz"StataWriter._set_formats_and_types s"$ "$  ,,.. M MJC L   ;E49S> R R S S S L   4UDIcN K K L L L L M Mrc|}|jr+|}t|tr|}||}t |}||}tj d|j d|_ | |}d|D}|j |}|xj |zc_ |j|||}|j \|_|_||_|j |_|j}|D]6}||jvr t3j||jdr d|j|<7t9|j|j|_|jD]8}t;|j|} tj| |j|<9|| ||j4|jD].}t|tBr|j||j"|<-dSdS)NFr?cg|] }|j Sr1)r)rjrs rrkz/StataWriter._prepare_pandas.. sGGG33;GGGrrrI)#rrt reset_indexrr#rrrrkrepeatrrwrrr,rvextendrnobsnvarrtolistrXrrrrrLr]rWr_encode_stringsrrr%) rrtemprnon_cat_columnshas_non_cat_val_labelsrrr7new_types rrzzStataWriter._prepare_pandas syyy{{   ##%%D$ ** ''--$D))!!$''"$5$*Q-!@!@ $AA$GGGG2FGGG!%!2!2?!C!C "88 !!"6777))$//#z 49 |**,,  0 0Cd)))tCy44 0+/#C(8    & 2 2C6t7J37OPPH!x11FK    ##F+++   ** A Ac3''A(,(;C(@DL% + * A Arc$|j}t|dg}t|jD]\}}||vs||vr|j|}|j}|jt jurt|d}|dks-t|dks|j }td|d|j|j |j}tt!|j|j|jkr ||j|<dS) z Encode strings in dta-specific encoding Do not encode columns marked for date conversion or for strL conversion. The strL converter independently handles conversion and also accepts empty string arrays. _convert_strlTrrNrzColumn `a` cannot be exported. Only string-like object arrays containing all strings or a mix of strings and None can be exported. Object arrays containing only null values are prohibited. Other object types cannot be exported and must first be converted to one of the supported types.N)rrrrrLrUrkrbrrrryrErrrrrn_max_string_length) rr convert_strlrrr2rLinferred_dtypeencodeds rrzStataWriter._encode_strings s6+ t_b99  ** - -FAsM!!SL%8%8Ys^FLEzRZ''!,VD!A!A!A'833F q8H8H +C$ )C.,33DNCC)ty~7M)N)NOO.//&-DIcN3 - -rc t|jd|jd|j5|_|jjdS|jjtc|_|j_|jj |jj | |j |j ||||||||||}|||||||n#t:$r}|jt?|jt@tBj"frtBj#$|jr\ tCj%|jnA#tL$r4tOj(d|jdtRtU YnwxYw|d}~wwxYw ddddS#1swxYwYdS) a Export DataFrame object to Stata dta format. This method writes the contents of a pandas DataFrame to a `.dta` file compatible with Stata. It includes features for handling value labels, variable types, and metadata like timestamps and data labels. The output file can then be read and used in Stata or other compatible statistical tools. See Also -------- read_stata : Read Stata file into DataFrame. DataFrame.to_stata : Export DataFrame object to Stata dta format. io.stata.StataWriter : A class for writing Stata binary dta files. Examples -------- >>> df = pd.DataFrame( ... { ... "fully_labelled": [1, 2, 3, 3, 1], ... "partially_labelled": [1.0, 2.0, np.nan, 9.0, np.nan], ... "Y": [7, 7, 9, 8, 10], ... "Z": pd.Categorical(["j", "k", "l", "k", "j"]), ... } ... ) >>> path = "/My_path/filename.dta" >>> labels = { ... "fully_labelled": {1: "one", 2: "two", 3: "three"}, ... "partially_labelled": {1.0: "one", 2.0: "two"}, ... } >>> writer = pd.io.stata.StataWriter( ... path, df, value_labels=labels ... ) # doctest: +SKIP >>> writer.write_file() # doctest: +SKIP >>> df = pd.read_stata(path) # doctest: +SKIP >>> df # doctest: +SKIP index fully_labelled partially_labeled Y Z 0 0 one one 7 j 1 1 two two 7 k 2 2 three NaN 9 l 3 3 three 9.0 8 k 4 4 one NaN 10 j wbF)rrr5methodN)r;r=z!This save was not successful but z. could not be deleted. This file is not valid.r`)+r(r{rr5rrrrrxcreated_handlesr _write_headerrQrS _write_map_write_variable_types_write_varnames_write_sortlist_write_formats_write_value_label_names_write_variable_labels_write_expansion_fields_write_characteristics _prepare_data _write_data _write_strls_write_value_labels_write_file_close_tag_close ExceptionrrrErPathLikepathisfileunlinkOSErrorrtrurr)rrecordsexcs r write_filezStataWriter.write_file s&X K ) 0    /  \|'1=:>9Lgii6!4<#6 ,33DL4GHHH" ""#/D> 27>>KDD  $+...." B BBB+'7'9'9   A/ / / / / / / / / / / / / / / / / / s\A+KE"G32K3 K=A#J>!I;:J>;;J96J>8J99J>>KKKKc|jrt|jjtsJ|jj|jc}|j_|jj|dSdS)z Close the file if it was created by the writer. If a buffer or file-like object was passed in, for example a GzipFile, then leave this file open for the caller to close. N)rxrrrrr r$)rr%s rrzStataWriter._closep sp   (dl17;; ; ;;'+|':D||t|dd d |tj }n$t|tstd gd}dt|D}|d||jz|dz}|||dS)Nr`rrArSr{rZrrWrP"time_stamp should be datetime type JanFebMarAprMayJunJulAugSepOctNovDecc i|] \}}|dz| Sr?r1rjrrs r z-StataWriter._write_header.. "GGGEAuGGGr%d %Y %H:%M)r!rrr!rrr_null_terminate_bytesr"rnowrryrstrftimer)rr;r=rmonths month_lookuptss rrzStataWriter._write_header s  O  &+c3//000 Y#%0&;V<<< F F &+i#otyAA"1"EFFF &+i#otyAA"1"EFFF     d88B9K9KLL M M M M   **:j"or+J+JKK     !JJJ11 CABB B    HGYv5F5FGGG    & &:+, -!!+.. / $44R8899999rcj|jD]*}|tjd|+dS)Nr)rrrrr!)rrus rrz!StataWriter._write_variable_types s@< 5 5C   fk#s33 4 4 4 4 5 5rc|jD]D}||}t|ddd}||EdS)Nrry)rX_null_terminate_strr"r)rrs rrzStataWriter._write_varnames s^L  D++D11Dd3B3i,,D KK      rcftdd|jdzz}||dS)NrrZr?)r"rr)rsrtlists rrzStataWriter._write_sortlist s4Rdi!m!455 Grc`|jD]%}|t|d&dS)Nr)r%rr")rrDs rrzStataWriter._write_formats s<< - -C KK 3++ , , , , - -rc4t|jD]}|j|rP|j|}||}t |ddd}||_|t dddS)Nrryr)r#rrwrXrr"r)rrrs rrz$StataWriter._write_value_label_names sty!! 0 0A%a( 0|A//55!$ss)R00 D!!!! Jr2..//// 0 0rctdd}|j.t|jD]}||dS|jD]}||jvr}|j|}t |dkrtdtd|D}|std|t|d||dS)Nrrr.Variable labels must be 80 characters or fewerc3<K|]}t|dkVdS)N)ordrs rrz5StataWriter._write_variable_labels.. s,<<A <<<<<S 4<?!!DI""4((?ocm.L.LLoo $ $FAs!*Cd---#Y%%b))HHZsfH==S !C #s  I,,U33S S '@!..t??E#s U&AAArrcT||dSrQ)rtobytesrrs rrzStataWriter._write_data' s& '//++,,,,,rrhc|dz }|S)NrSr1)rhs rrzStataWriter._null_terminate_str* s V rc\|||jSrQ)rrr)rrhs rrz!StataWriter._null_terminate_bytes/ s&''**11$.AAAr)NTNNNNrN)rmrnrr#rrorprrrr=rqr;rr@rorr.r5rrrrrFr)r}rErFr)rrrFr)rr#rFrrBr,rrErFrErr&rFr)rr#rFrNNr;rr=rqrFr)rFrrrrFr)rhrErFrE)rhrErFr))r-r.r/r0rrr_rrrrrrrrrrrzrrrrrrrrrrrrrrrrr rr staticmethodrrrDrEs@rrkrkI sT]]~-6I6666 59 $&*!%6:*115$LAE$L$L$L$L$L$L$L$LLCCCC )))) $$$$B(9(9(9(9T"++++", "<", "little", or "big". default is `sys.byteorder` Notes ----- Supports creation of the StrL block of a dta file for dta versions 117, 118 and 119. These differ in how the GSO is stored. 118 and 119 store the GSO lookup value as a uint32 and a uint64, while 117 uses two uint32s. 118 and 119 also encode all strings as unicode which is required by the format. 117 uses 'latin-1' a fixed width encoding that extends the 7-bit ascii table with an additional 128 characters. r<Ndfr#rrr?rrrrFrc|dvrtd||_||_||_ddi|_| t j}t||_|jtt jk|_ d}d}d|_ |dkr d }d}d |_ n |d krd }nd }|j rddd|z zz|_ n dd|zz|_ ||_ ||_ dS)Nr;z,Only dta versions 117, 118 and 119 supportedrrrr%ryrr<rWrrrrrZr )ry_dta_verr(r _gso_tablerrrr!rr_o_offet _gso_o_type _gso_v_type)rr(rr?r gso_v_type gso_o_typeo_sizes rrzStataStrLWriter.__init__ s / ) )KLL L  v,   I))44!%OCM4R4R!R    c>>FJ&DNN ^^FFF  ! .!q6z"23DMM!f*-DM%%rr7tuple[int, int]cN|\}}|jr ||j|zzS||j|zzSrQ)rr-)rr7rrs r _convert_keyzStataStrLWriter._convert_key s<1  ! )t}q(( (t}q(( (r,tuple[dict[str, tuple[int, int]], DataFrame]ch|j}|j}t|j||j}fd|jD}t j|jtj}t| D]|\}\}}t|D]d\} \} } || } t| rdn| } | | d} | | dz|dzf} | || <| | ||| f<e}t|jD]\}} |dd|f|| <||fS)a Generates the GSO lookup table for the DataFrame Returns ------- gso_table : dict Ordered dictionary using the string found as keys and their lookup position (v,o) as values gso_df : DataFrame DataFrame where strl columns have been converted to (v,o) values Notes ----- Modifies the DataFrame in-place. The DataFrame returned encodes the (v,o) values as uint64s. The encoding depends on the dta version, and can be expressed as enc = v + o * 2 ** (o_size * 8) so that v is stored in the lower bits and o is in the upper bits. o_size is * 117: 4 * 118: 6 * 119: 5 c>g|]}||fSr1rM)rjrrs rrkz2StataStrLWriter.generate_table.. s*GGG3c7==--.GGGrrKrNr?) r,r(rrrkemptyrrriterrowsr!getr5)r gso_tablegso_dfselected col_indexr+rrrowrrrrr7rrs @rgenerate_tablezStataStrLWriter.generate_table s]:O v~&&$,'GGGG$,GGG xbi888&x'8'8':':;; 4 4MAzS(33 4 4 8C#h II.bb3mmC..;q5!a%.C%(IcN!..s33QT  4  -- % %FAsqqq!t*F3KK&  rr<dict[str, tuple[int, int]]rc t}tdd}tj|jdzd}tj|jdzd}|j|jz}|j|jz}|jdz}|D]\} } | dkr | \} } |||tj|| |tj|| ||t| trt| d} n| } |tj|t| d z|| ||| S) a Generates the binary blob of GSOs that is written to the dta file. Parameters ---------- gso_table : dict Ordered dictionary (str, vo) Returns ------- gso : bytes Binary content of dta file to be placed between strl tags Notes ----- Output format depends on dta version. 117 uses two uint32s to express v and o while 118+ uses a uint32 for v and a uint64 for o. rasciirrrr%r*rr?) rrrr!r!r/r.r9r rrErr$)rr<r%gsogso_typenullv_typeo_typelen_typestrlvorr strl_converts r generate_blobzStataStrLWriter.generate_blob s:iiE7##;t4c::{4?S0!444#334#33?S(!))  HD"V||DAq IIcNNN IIfk&!,, - - - IIfk&!,, - - - IIh   $$$ $$T733 # IIfk(C ,=,=,ABB C C C IIl # # # IIdOOOO||~~r)r<N) r(r#rrr?rrrrFr)r7r3rFr)rFr6)r<rBrFr)r-r.r/r0rr5rArNr1rrr'r'f s@ $ $&$&$&$&$&L))))1!1!1!1!fAAAAAArr'ceZdZdZdZdZ d=ddd>fd Zed?d&Zd@d'Z dAdBd(Z dCd)Z dCd*Z dCd+Z dCd,ZdCd-ZdCd.ZdCd/ZdCd0ZdDd3ZdCd4ZdCd5ZdCd6ZdCd7ZdCd8ZdEd9ZdFd<ZxZS)GStataWriter117a A class for writing Stata binary dta files in Stata 13 format (117) Parameters ---------- fname : path (string), buffer or path object string, pathlib.Path or object implementing a binary write() functions. If using a buffer then the buffer will not be automatically closed after the file is written. data : DataFrame Input to save convert_dates : dict Dictionary mapping columns containing datetime types to stata internal format to use when writing the dates. Options are 'tc', 'td', 'tm', 'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name. Datetime columns that do not have a conversion type specified will be converted to 'tc'. Raises NotImplementedError if a datetime column has timezone information write_index : bool Write the index to Stata dataset. byteorder : str Can be ">", "<", "little", or "big". default is `sys.byteorder` time_stamp : datetime A datetime to use as file creation date. Default is the current time data_label : str A label for the data set. Must be 80 characters or smaller. variable_labels : dict Dictionary containing columns as keys and variable labels as values. Each label must be 80 characters or smaller. convert_strl : list List of columns names to convert to Stata StrL format. Columns with more than 2045 characters are automatically written as StrL. Smaller columns can be converted by including the column name. Using StrLs can reduce output file size when strings are longer than 8 characters, and either frequently repeated or sparse. {compression_options} value_labels : dict of dicts Dictionary containing columns as keys and dictionaries of column value to labels as values. The combined length of all labels for a single variable must be 32,000 characters or smaller. Returns ------- writer : StataWriter117 instance The StataWriter117 instance has a write_file method, which will write the file to the given `fname`. Raises ------ NotImplementedError * If datetimes contain timezone information ValueError * Columns listed in convert_dates are neither datetime64[ns] or datetime * Column dtype is not representable in Stata * Column listed in convert_dates is not in DataFrame * Categorical label contains more than 32,000 characters Examples -------- >>> data = pd.DataFrame([[1.0, 1, "a"]], columns=["a", "b", "c"]) >>> writer = pd.io.stata.StataWriter117("./data_file.dta", data) >>> writer.write_file() Directly write a zip file >>> compression = {"method": "zip", "archive_name": "data_file.dta"} >>> writer = pd.io.stata.StataWriter117( ... "./data_file.zip", data, compression=compression ... ) >>> writer.write_file() Or with long strings stored in strl format >>> data = pd.DataFrame( ... [["A relatively long string"], [""], [""]], columns=["strls"] ... ) >>> writer = pd.io.stata.StataWriter117( ... "./data_file_with_long_strings.dta", data, convert_strl=["strls"] ... ) >>> writer.write_file() rnr<NTrrlrmrnrr#rrorprrrr=rqr;r@rSequence[Hashable] | Nonerr.r5rrrrrFrc  g|_| |j| t||||||||| | |  i|_d|_dS)N)rr=r;r@rrr5r)rrrr_map _strl_blob)rrmrrrprr=r;r@rrr5rrs rrzStataWriter117.__init__ s".0  #   % %l 3 3 3     !!+%#+  %' rrr#tagrErct|trt|d}td|zdzd|ztd|zdzdzS)zSurround val with rrBrAzrreleaserAMSFLSFrrrr%Kr<ryNNrrrr1rrc i|] \}}|dz| Srr1rs rrz0StataWriter117._write_header.. rrrr timestampheader)r!rrrr rWrE _dta_versionrr!rrrrrrrrryrrrr$)rr;r=rr% nvar_type nobs_sizer1 encoded_label label_size label_lenrrrstata_tss rrzStataWriter117._write_header s O  % w77888ii $))E#d&7"8"8'BBINNOOO $))Y#-7%AE;OOPPP,33CC  $))FK I(=tyII3OOPPP,33CC  $))FK I(=tyII3OOPPP#-#9 3B3r T^44  -44SS# K J 6M8J8JKK !M1  $))M733444  !JJJ11 CABB B    HGYv5F5FGGG    & &:+, -!!+.. / U2w/// $))Hk22333 $))CLLNNH==>>>>>rc|js2d|jjddddddddddddd|_|jj|jdt }|jD]2}|tj |j dz|3| | | ddS)z Called twice during file write. The first populates the values in the map with 0s. The second call writes the final map locations when all blocks have been written. r) stata_datamapvariable_typesvarnamessortlistformatsvalue_label_namesr@characteristicsrstrlsrstata_data_close end-of-filermryN)rSrrrrarrr rr!r!rrWr$)rr%rs rrzStataWriter117._write_map s y |*//11"#%&#$#$ !$% DI"   5!1222ii9##%% ? ?C IIfk$/C"7== > > > > $))CLLNNE::;;;;;rc6|dt}|jD]2}|t j|jdz|3||| ddS)Nrnr) rYrrrr rr!r!rrWr$)rr%rus rrz$StataWriter117._write_variable_typess )***ii< ? ?C IIfk$/C"7== > > > > $))CLLNN4DEEFFFFFrc|dt}|jdkrdnd}|jD]_}||}t |dd|j|dz}||`| | | ddS)Nror<rrr?) rYrrdrXrr%rrr rrWr$)rr%vn_lenrs rrzStataWriter117._write_varnamess $$$ii(C//SL  D++D11D!$ss)"2"24>"B"BFQJOOD IIdOOOO $))CLLNNJ??@@@@@rc|d|jdkrdnd}||d|z|jdzzddS)Nrpr=rZrWrr?)rYrdrrWr)r sort_sizes rrzStataWriter117._write_sortlistsd $$$*S00AAa  $))Gi$749q=$I:VVWWWWWrcj|dt}|jdkrdnd}|jD]=}|t ||j|>|| | ddS)Nrqr<rr) rYrrdr%r r%rrrrWr$)rr%fmt_lenrDs rrzStataWriter117._write_formatss ###ii)S00""b< K KC IInSZZ%?%?II J J J J $))CLLNNI>>?????rc|dt}|jdkrdnd}t|jD]{}d}|j|r |j|}||}t|dd |j |dz}| ||| | |ddS)Nrrr<rrrr?)rYrrdr#rrwrXrr%rrr rrWr$)rr%vl_lenrr encoded_names rrz'StataWriter117._write_value_label_names's ,---ii(C//Sty!! $ $AD%a( '|A++D11D)$ss)*:*:4>*J*JFUVJWWL IIl # # # # $))CLLNN4GHHIIIIIrcn|dt}|jdkrdnd}td|dz}|jit |jD]}|||| | ddS|j D]}||jvr|j|}t|dkrtd ||j}n*#t $r}td|j|d}~wwxYw|t||dz|||| | ddS) Nr@r<ri@rr?rzDVariable labels must contain only characters that can be encoded in )rYrrdr%rjr#rr rrWr$rrryrrUnicodeEncodeError) rr%rr rtrr1rrvs rrz%StataWriter117._write_variable_labels6s *+++ii(C//Sr6A:..  (49%% ! ! %      dii 8IJJ K K K F9 ! !Cd+++-c2u::??$%UVVV#ll4>::GG)$>-1^>>  .&1*==>>>> %     $))CLLNN4EFFGGGGGs8D D:D55D:c|d||dddS)Nrsr)rYrrWrMs rrz%StataWriter117._write_characteristicsVs@ *+++ $))C):;;<<<<s)rYrrrs rrzStataWriter117._write_dataZsb     )$$$ '//++,,, *%%%%%rc|d|||jddS)Nrt)rYrrWrTrMs rrzStataWriter117._write_strls`s@ !!! $))DOW==>>>>>rcdS)zNo-op in dta 117+Nr1rMs rrz&StataWriter117._write_expansion_fieldsdrrc`|dt}|jD]G}||j}||d}||H|||ddS)Nrlbl) rYrrvr*r!rWr rr$)rr%rlabs rrz"StataWriter117._write_value_labelsgs (((ii$  B))$/::C))C''C IIcNNNN $))CLLNNNCCDDDDDrc|d|tdd|ddS)Nruz rrv)rYrrrMs rrz$StataWriter117._write_file_close_tagpsO +,,, %88999 '''''rc|jD]2\}}||jvr$|j|}||j|<3dS)z Update column names for conversion to strl if they might have been changed to comply with Stata naming rules N)ryr9rrN)rorignewrs rrz!StataWriter117._update_strl_namesusb .4466 . .ID#t)))(..t44*-"3' . .rcfdt|D}|rPt||jj}|\}}|}||_|S)zg Convert columns to StrLs if either very large or in the convert_strl variable cNg|]!\}}j|dks |jv|"S)rr)rrr)rjrrrs rrkz1StataWriter117._convert_strls..sE   3|A%''3$2D+D+D +D+D+Dr)r?r)rr'rdr!rArNrT)rr convert_colssswtabnew_datas` rr zStataWriter117._convert_strlss     #D//    5!lD,=C ..00MCD!//44DO rrr&cJg|_g|_|D]\}}||jv}t ||j||j|}|j||jt||j||dS)N)rdre) rrr%r9rrirrdrr")rrrrLrerDs rrz%StataWriter117._set_formats_and_typess   ,,..  JC 22J- # -% C L   $ $ $ L  ( # KK      r) NTNNNNNrN)rmrnrr#rrorprrrr=rqr;rr@rorrQrr.r5rrrrrFr)rr#rUrErFr)rUrErFrrrr,rrBr)r-r.r/r0rrdrr rWrYrrrrrrrrrrrrrrrr rrDrEs@rrPrP( sBQQfL 59 $&*!%6:26*115#AE########JXXX\X 4444"&&*8?8?8?8?8?t<<<<<GGGG A A A AXXXX @@@@ J J J JHHHH@====&&&& ????    EEEE(((( . . . .(rrPcXeZdZUdZdZded< d'ddd(fd#Zd)d&ZxZS)*StataWriterUTF8u^ Stata binary dta file writing in Stata 15 (118) and 16 (119) formats DTA 118 and 119 format files support unicode string data (both fixed and strL) format. Unicode is also supported in value labels, variable labels and the dataset label. Format 119 is automatically used if the file contains more than 32,767 variables. Parameters ---------- fname : path (string), buffer or path object string, pathlib.Path or object implementing a binary write() functions. If using a buffer then the buffer will not be automatically closed after the file is written. data : DataFrame Input to save convert_dates : dict, default None Dictionary mapping columns containing datetime types to stata internal format to use when writing the dates. Options are 'tc', 'td', 'tm', 'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name. Datetime columns that do not have a conversion type specified will be converted to 'tc'. Raises NotImplementedError if a datetime column has timezone information write_index : bool, default True Write the index to Stata dataset. byteorder : str, default None Can be ">", "<", "little", or "big". default is `sys.byteorder` time_stamp : datetime, default None A datetime to use as file creation date. Default is the current time data_label : str, default None A label for the data set. Must be 80 characters or smaller. variable_labels : dict, default None Dictionary containing columns as keys and variable labels as values. Each label must be 80 characters or smaller. convert_strl : list, default None List of columns names to convert to Stata StrL format. Columns with more than 2045 characters are automatically written as StrL. Smaller columns can be converted by including the column name. Using StrLs can reduce output file size when strings are longer than 8 characters, and either frequently repeated or sparse. version : int, default None The dta version to use. By default, uses the size of data to determine the version. 118 is used if data.shape[1] <= 32767, and 119 is used for storing larger DataFrames. {compression_options} value_labels : dict of dicts Dictionary containing columns as keys and dictionaries of column value to labels as values. The combined length of all labels for a single variable must be 32,000 characters or smaller. Returns ------- StataWriterUTF8 The instance has a write_file method, which will write the file to the given `fname`. Raises ------ NotImplementedError * If datetimes contain timezone information ValueError * Columns listed in convert_dates are neither datetime64[ns] or datetime * Column dtype is not representable in Stata * Column listed in convert_dates is not in DataFrame * Categorical label contains more than 32,000 characters Examples -------- Using Unicode data and column names >>> from pandas.io.stata import StataWriterUTF8 >>> data = pd.DataFrame([[1.0, 1, "ᴬ"]], columns=["a", "β", "ĉ"]) >>> writer = StataWriterUTF8("./data_file.dta", data) >>> writer.write_file() Directly write a zip file >>> compression = {"method": "zip", "archive_name": "data_file.dta"} >>> writer = StataWriterUTF8("./data_file.zip", data, compression=compression) >>> writer.write_file() Or with long strings stored in strl format >>> data = pd.DataFrame( ... [["ᴀ relatively long ŝtring"], [""], [""]], columns=["strls"] ... ) >>> writer = StataWriterUTF8( ... "./data_file_with_long_strings.dta", data, convert_strl=["strls"] ... ) >>> writer.write_file() rzLiteral['utf-8']rNTrrlrmrnrr#rrorprrrr=rqr;r@rrQr?rrr.r5rrrrrFrc | |jddkrdnd} n9| dvrtd| dkr |jddkrtdt||||||||| | | |  | |_dS) Nr?irr=)rr=z"version must be either 118 or 119.zKYou must use version 119 for data sets containing more than32,767 variables) rrprr=r;r@rrrr5)rryrrrd)rrmrrrprr=r;r@rr?rr5rrs rrzStataWriterUTF8.__init__s" ?!Z]e33ccGG J & &ABB B ^^ 1  5 5#    '#!!+%%#+  $rrrEc|D]u}t|dkr*|dks|dkr|dks|dkr|dks|dkr|dks dt|cxkrd ksn|d vr||d}v|S) a Validate variable names for Stata export. Parameters ---------- name : str Variable name Returns ------- str The validated name with invalid characters replaced with underscores. Notes ----- Stata 118+ support most unicode characters. The only limitation is in the ascii range where the characters supported are a-z, A-Z, 0-9 and _. rrrrrrrrt>×÷)r r rs rrz'StataWriterUTF8._validate_variable_name2s* , ,AFFSLLSAGGSAGGSAGGS#a&&&&&&3&&&& $$||As++ r) NTNNNNNNrN)rmrnrr#rrorprrrr=rqr;rr@rorrQr?rrr.r5rrrrrFrr) r-r.r/r0rr_rrrDrEs@rrrs\\|#*I)))) 59 $&*!%6:26"*115*$AE*$*$*$*$*$*$*$*$X########rr)rCr&rDrErFr&rB)rHrrrrrrrrrrrrrrrrrrGrrr.r5rrFrI)rMrErFrE)rr rrrFr )rDrErFrZ)rrrXrYrFr)rLrZr2r&rFr)rF) rLrZr2r&rdrrerrFrE)rLrZr2r&rerrFr)rr#rrrFr)sr0 __future__r collectionsrrriorrrrtypingrr r r r r rtnumpyrk pandas._libsrpandas._libs.librpandas._libs.writersr pandas.errorsrrrrrpandas.util._decoratorsrpandas.util._exceptionsrpandas.core.dtypes.baserpandas.core.dtypes.commonrrrpandas.core.dtypes.dtypesrrFrrrr r!r"pandas.core.framer#pandas.core.indexes.baser$pandas.core.indexes.ranger%pandas.core.seriesr&pandas.core.shared_docsr'pandas.io.commonr(collections.abcr)r*r+typesr,r-pandas._typingr.r/r0r1r2rL_statafile_processing_params1_statafile_processing_params2_chunksize_params _reader_notesrCrr@r_rBrrrrrrrrrr3rrgIteratorrrLrr"rWr]rcrirkr"r%r'rPrr1rrrs2   #""""" ((((((555555544444222222 766666('''''******000000%%%%%%000000'''''' $#####J!N !G$ ( %& $ONN XdAq)) ))))HT1a(( ((((uuuupr7r7r7r7j( #     )}}}}@ppppppppf%%%%%O%%%>CCCCCCCCLi i i i i i i i X    h&h&h&h&h&+s|h&h&! h&V! H!% ! $(# &--1RRRRRRjDDDD0000CCCC2    !G!G!G!GJQV*G*G*G*G*GZg Bg Bg Bg Bg B+g Bg Bg BT'G'G'G'GT1111Dzzzzz[zzzz pppppnpppppr