U
    f/ev                     @   s   d dl m Z mZmZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ G dd dZG dd dZdS )    )datetime	timedeltatimezoneN)
Categorical	DataFrameDatetimeIndexNaTPeriodSeries	Timedelta	Timestamp
date_rangeisnac                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dddgdd Zdd Zdd Zdd Zdd Zdd Zdd Ze	j
ddddd ddgfdd d d!ddd d d gfd"diddd ejejgfdd d#ddd d ejgfeddejd ejejgfedd"gd$ddd ejejgfedd d#ddd d ejgfedd gd%d&gd$dejd dd gfgd'd( Ze	j
dedd d)d*d+gdd d d*d+gfed d*dd*dgdd*d d*dgfeed d*dd*dgd d)d*d+dgd,dd*d d*dgfgd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<TestSeriesFillNAc                 C   s`  t dddtjgdd}|jdd}|j|jd d}| }|jd |jd	< t|| t|| td
|i}|jdd}|j|jd d}td
|i}t	|| t	|| t tjdddgdd}|jdd}|j|d d}| }|d |d< t|| t|| td
|i}|jdd}|j|d d}td
|i}t	|| t	|| d S )Nr         M8[ns]dtypepadmethodvalue   Abfill)
r
   r   r   fillnavaluescopytmassert_series_equalr   Zassert_frame_equal)selfseriesfilledZfilled2expectedZdf r&   K/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/series/methods/test_fillna.pytest_fillna_nat   s4    z TestSeriesFillNA.test_fillna_natc              	   C   sb  t dddddgtdd}t||jdd	 tj|d
< t dddddg|jd}t|jdd	| t dddddg|jd}t|jdd	| t dddddg|jd}t|jdd| d}tj	t
|d |  W 5 Q R X d}tj	t
|d |jddd W 5 Q R X t tjg}t dg}||}t dg}t|| |i }t|| |t dtd}t|| ||}t|| |ddi}t|| |ddi}t|t tjg |ddd}t|| |t ddd}t|| |t dddddgd}t|| t ddd
gtd}t dtjd
gtd}||}t dddgtd}t|| t tjddd
gd}	|	jddd}t dtjtjgddd
gd}t|| |	jdd
d}t ddtjgddd
gd}t|| dddg}
|
D ]L}t ddtjtjdgdd}	|	|}t dd||dgd d}t|| qd S )!N              ?       @      @      @   indexffillr   r   backfillg      @r   z'Must specify a fill 'value' or 'method'matchz(Cannot specify both 'value' and 'method'r   )r   r   r   r&   r   )r   r      abcZbaci  )limit0z1.5z-0.3Zfloat64object)r
   r    makeDateIndexr!   r   npNaNr0   pytestraises
ValueErrornanr9   list)r"   datetime_seriestsexpmsgs1s2resultr%   servalsvalr&   r&   r'   test_fillna@   sl    








zTestSeriesFillNA.test_fillnac                 C   s   t tdtg}|tddd}t tdtdddgdd}t|| |jddgtdddd	d
}t|| |jddgtdddd	d
}t|| |d}t tddg}t|| | }d|d< t|| d S )N20130101
US/Easterntz
2013-01-01r9   r   TFignore)errorsZfoor   )r
   r   r   r   r    r!   wherer   )r"   rI   rH   r%   ser2r&   r&   r'   test_fillna_consistency   s2     
  
 
z(TestSeriesFillNA.test_fillna_consistencyc                 C   sp   t dtjg}|jddd}t ddg}t|| t dtjg}|jddidd}t ddg}t|| d S )Nr*   r   Zinfer)Zdowncastr   )r
   r;   r@   r   r    r!   r"   rI   rH   r%   r&   r&   r'   test_fillna_downcast   s    z%TestSeriesFillNA.test_fillna_downcastc              	   C   s^  t tdtdtdtdg}| }||}|tdd}t tdtdtdtdddg}||}t|| d	}tj	t
|d
 |d W 5 Q R X |tdd}t tddtdtdtdddg}||}t|| |tddd}t tdddtdtdtdddg}||}t|| |td}t tddtdtdtdddg}||}t|| |t}t ttdtdtdddgdd}||}t|| tj|d< ||}| }|tdd}tj|d< ||}t|| tj|d< ||}| }|tdd}tddd|d< ||}t|| d S )NrM   2013010220130103 9:01:01r   )secondsr   i~  )daysr[   zBvalue should be a 'Timedelta', 'NaT', or array of those. Got 'int'r3   i ʚ;zm8[ns]r   r   )r
   r   Zdiffr   r   r   r    assert_equalr=   r>   	TypeErrorr;   Ztimedelta64r   r@   r1   r   )r"   frame_or_seriesrI   tdobjrH   r%   rE   r&   r&   r'   test_timedelta_fillna   s    






	


z&TestSeriesFillNA.test_timedelta_fillnac              	   C   s   t tdtdtdtdg}tj|d< | }t tdtdtdtdg}t|| | }t tdtdtdtdg}t|| d}tjt	|d t t
t
dg}W 5 Q R X t dddgdd	}|jd
d}t|| d S )NrM   rY   rZ   r   z containing strings is deprecatedr3   z2013-08-05 15:30:00.000001r   r   r2   r   )r
   r   r;   r@   r1   r    r!   r   assert_produces_warningFutureWarningr   r   )r"   rI   rH   r%   rE   r&   r&   r'   test_datetime64_fillna  sL    
z'TestSeriesFillNA.test_datetime64_fillnarP   rN   z
Asia/Tokyoc                 C   s  t tdttdtg}t ddddg}|td}t tdtdtdtdg}t|| tt|| |td|d}t tdtd|dtdtd|dg}t|| tt|| |d}t tddtddgtd}t|| tt|| |td|dtd	d
}t tdtd|dtdtd	g}t|| tt|| |tdtd	d
}t tdtdtdtd	g}t|| tt|| tdtdtg|d}t |}|j	d| dkst
tt|| |td}t td|dtdtd|dtdg}t|| tt|| |td|d}tddddg|d}t |}t|| tt|| |td|d }tddddg|d}t |}t|| tt|| |d}t td|ddtd|ddgtd}t|| tt|| |td|dtd	d
}t td|dtd|dtd|dtd	g}t|| tt|| |td|dtd	|dd
}t td|dtd|dtd|dtd	|dg}t|| tt|| |td}t td|dtdtd|dtdg}t|| tt|| |tddd}t td|dtdddtd|dtdddg}t|| tt|| d S )Nz2011-01-01 10:00z2011-01-03 10:00FTz2011-01-02 10:00rO   ZAAAr   z2011-01-04 10:00r   r   zdatetime64[ns, ]rM   rQ   
US/Pacific)r
   r   r   r   r    r!   r   r9   r   r   AssertionErrorZto_pydatetime)r"   rP   rI   Znull_locrH   r%   idxr&   r&   r'   test_datetime64_tz_fillnaR  sD   


	



		


	















z*TestSeriesFillNA.test_datetime64_tz_fillnac                 C   st   t tdtg}t tdtdg}t|jdd| t ttdg}t tdtdg}t|jdd| d S )Nz2012-11-11 00:00:00+01:00r   r   r   )r
   r   r   r    r!   r   )r"   rI   rD   r&   r&   r'   test_fillna_dt64tz_with_method  s    z/TestSeriesFillNA.test_fillna_dt64tz_with_methodc                 C   sL   t tjtdgddgd}|td}t tdddgd}t|| d S )Nz1 daysr   Br/   r   )r
   r;   r@   r   r   r   r    r!   rW   r&   r&   r'   test_fillna_pytimedelta/  s    z(TestSeriesFillNA.test_fillna_pytimedeltac                 C   sh   t tdddtdddg}|tddd}t tdddtdddg}t|| |jdksdtd S )Nz2011-01M)freqr   z2012-01z	Period[M])r
   r	   r   r    r!   r   ri   )r"   rI   resrD   r&   r&   r'   test_fillna_period7  s
    z#TestSeriesFillNA.test_fillna_periodc                 C   s   t tdtdtdtdg}tj|d< ||}|td}t tdtdtdtdg}||}t|| |t}|}t|| d S )NrM   rY   rZ   r   Z20130104)r
   r   r;   r@   r   r    r]   r   )r"   r_   rI   ra   rH   r%   r&   r&   r'   test_fillna_dt64_timestamp@  s,    

z+TestSeriesFillNA.test_fillna_dt64_timestampc                 C   sV   t tdttdg}tdd}||}t tdtdtdg}t|| d S )Nz
2010-01-01
2000-01-01z
1975-04-05ms)r
   r   r   r;   Z
datetime64r   r    r!   )r"   rI   rK   rH   r%   r&   r&   r'   test_fillna_dt64_non_nao]  s    
z)TestSeriesFillNA.test_fillna_dt64_non_naoc                 C   sb   t tjdtjdtjgdddddg}| }|jdd	d
}|d ksFt|jdd}t|| d S )Nr*   r,   zabcdr   T)r   inplacer   )r
   r;   r@   r   r   ri   r    r!   )r"   xyreturn_valuer%   r&   r&   r'   test_fillna_numeric_inplaceh  s    $z,TestSeriesFillNA.test_fillna_numeric_inplacezfill_value, expected_outputrx   ry   )r   r   r5   r   rf   r/   r   r5   c                 C   sV   dt jdt jt jg}tt|ddgd}tt|ddgd}||}t|| d S )Nrx   ry   
categoriesr;   r@   r
   r   r   r    r!   r"   Z
fill_valueZexpected_outputdatarI   rD   rH   r&   r&   r'   test_fillna_categoricalu  s
    
z(TestSeriesFillNA.test_fillna_categoricalrz   r{   er   c                 C   sb   dt jdt jt jg}tt|dddddgd}tt|dddddgd}||}t|| d S )Nrx   ry   rz   r{   r   r   r   r   r&   r&   r'   +test_fillna_categorical_with_new_categories  s
    
z<TestSeriesFillNA.test_fillna_categorical_with_new_categoriesc              	   C   s:  dt jdt jt jg}tt|ddgd}|j}d}tjt|d |d W 5 Q R X d}tjt|d |td W 5 Q R X tjt|d |ddd W 5 Q R X d	}tjt	|d |ddg W 5 Q R X d
}tjt	|d |d W 5 Q R X d}tjt	|d |t
dgdgd W 5 Q R X d S )Nrx   ry   r   z3Cannot setitem on a Categorical with a new categoryr3   r{   z!Length of 'value' does not match.rf   C"value" parameter must be a scalar or dict, but you passed a "list"D"value" parameter must be a scalar or dict, but you passed a "tuple")rx   ry   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame")r;   r@   r
   r   _valuesr=   r>   r?   r   r^   r   )r"   r   rI   catrE   Zmsg2r&   r&   r'   test_fillna_categorical_raises  s*    z/TestSeriesFillNA.test_fillna_categorical_raisesc              
   C   sH   z|j dd W n2 tk
rB } zdt|ks2tW 5 d }~X Y nX d S )NZffilr   )r   r?   strri   )r"   rB   instr&   r&   r'   test_fillna_invalid_method  s    z+TestSeriesFillNA.test_fillna_invalid_methodc              	   C   sl   t tjddd}d}tjt|d |ddg W 5 Q R X d}tjt|d |d	 W 5 Q R X d S )
Nd   2   r   r3   r   r   r   )r   r   )r
   r;   randomrandintr=   r>   r^   r   )r"   rI   rE   r&   r&   r'   test_fillna_listlike_invalid  s    z-TestSeriesFillNA.test_fillna_listlike_invalidc                 C   sV   t dddd g}d}dD ]8}dD ].}tjt|d |jd||d W 5 Q R X q qd S )	Nr   r   r   z`Cannot specify both 'value' and 'method'\.|Limit must be greater than 0|Limit must be an integer)r   r*   r+   )r2   r   r   r1   Nr3   )r7   r   )r
   r=   r>   r?   r   )r"   rI   rE   r7   r   r&   r&   r'   $test_fillna_method_and_limit_invalid  s    z5TestSeriesFillNA.test_fillna_method_and_limit_invalidc                 C   s   t tdddd}| }t|d< |tdddtjd}t	|| t
d	d
d}t |jd}||}t |d ||d gtd}t	|| d S )NZ2020r   UTC)ZperiodsrP   r   i  r   tzinfort   rh   rO   zdateutil/US/Pacificr   r   )r
   r   r   r   r   r   r   utcr    r!   r   r   Z
tz_convertr9   )r"   rI   r%   rH   rC   rU   r&   r&   r'   +test_fillna_datetime64_with_timezone_tzinfo  s    
z<TestSeriesFillNA.test_fillna_datetime64_with_timezone_tzinfoc              	   C   sf   t dddtjgtd}d}tjt|d |dd d }W 5 Q R X t ddddgtd}t|| d S )Nr   r   r   r   zqIn a future version of pandas all arguments of Series.fillna except for the argument 'value' will be keyword-onlyr3   r   )	r
   r;   r@   floatr    rc   rd   r   r!   )r"   ZsrsrE   rH   r%   r&   r&   r'    test_fillna_pos_args_deprecation  s    z1TestSeriesFillNA.test_fillna_pos_args_deprecationN)__name__
__module____qualname__r(   rL   rV   rX   rb   re   r=   markZparametrizerk   rl   rn   rr   rs   rv   r   r;   r@   r
   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   r      sb   %I"c6
 H	"
	 
"
r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestFillnaPadc                 C   s   t tjdtjdtjgdddddg}|jdd	}t tjddddg|j}t|| |jd
d	}t ddddtjg|j}t|| d S )Nr*   r,   rw   rx   ry   rz   r{   r1   r   r   )r
   r;   r@   r   r0   r    r!   )r"   rI   r$   r%   r&   r&   r'   test_fillna_bug   s    $zTestFillnaPad.test_fillna_bugc                 C   sB   t dddddgtdd}tj|d< t| |jd	d
 d S )Nr)   r*   r+   r,   r-   r.   r/   r   r1   r   )r
   r    r:   r;   r<   r!   r1   r   r"   rC   r&   r&   r'   
test_ffill
  s    
zTestFillnaPad.test_ffillc              	   C   sT   t dddg}d}tjt|d |d}W 5 Q R X t dddg}t|| d S )Nr   r   r   zPIn a future version of pandas all arguments of Series.ffill will be keyword-onlyr3   r   )r
   r    rc   rd   r1   r!   r"   rI   rE   rH   r%   r&   r&   r'   test_ffill_pos_args_deprecation  s    z-TestFillnaPad.test_ffill_pos_args_deprecationc                 C   s2   t tdddtjddg}| }t|| d S )Ni  r   r   )r
   r   pytzr   r1   r    r!   )r"   r#   rH   r&   r&   r'   ,test_ffill_mixed_dtypes_without_missing_data  s    z:TestFillnaPad.test_ffill_mixed_dtypes_without_missing_datac                 C   sB   t dddddgtdd}tj|d< t| |jd	d
 d S )Nr)   r*   r+   r,   r-   r.   r/   r   r   r   )r
   r    r:   r;   r<   r!   r   r   r   r&   r&   r'   
test_bfill!  s    
zTestFillnaPad.test_bfillc              	   C   sT   t dddg}d}tjt|d |d}W 5 Q R X t dddg}t|| d S )Nr   r   r   zPIn a future version of pandas all arguments of Series.bfill will be keyword-onlyr3   r   )r
   r    rc   rd   r   r!   r   r&   r&   r'   test_bfill_pos_args_deprecation&  s    z-TestFillnaPad.test_bfill_pos_args_deprecationc                 C   s   t tjdtjdtjgdddddgtd}|jd	d
d}|d ksBtt tjddddgdddddgtd}t|dd  |dd   t|d stt|d d S )Nr*   r,   rw   rx   ry   rz   r{   r   r   Tr   r|   r   r   )	r
   r;   r@   r   r   ri   r    r!   isnan)r"   r}   r   r%   r&   r&   r'   test_pad_nan2  s        zTestFillnaPad.test_pad_nanc                 C   s   t d}tt jd|d}|d d |}|jddd}|d d |jdd}t j|dd < t	|| |d	d  |}|jd
dd}|d	d  |jdd}t j|d d< t	|| d S )N
   r/   r   r   r.   r   r7   r   r   r2   r   
r;   Zaranger
   r   ZrandnZreindexr   r@   r    r!   r"   r0   srH   r%   r&   r&   r'   test_series_fillna_limit@  s    
z&TestFillnaPad.test_series_fillna_limitc                 C   s   t d}tt jd|d}|d d j|ddd}|d d |jdd}t j|dd < t	|| |d	d  j|d
dd}|d	d  |jd
d}t j|d d< t	|| d S )Nr   r/   r   r   r.   r   r   r   r   r2   r   r   r   r&   r&   r'   test_series_pad_backfill_limitR  s    
z,TestFillnaPad.test_series_pad_backfill_limitc                 C   sH   t tjddd}|jddd}|d ks.tt|jddd| d S )Nr   r   r   r1   Tr   F)r
   r;   r   r   r   ri   r    r!   )r"   rI   r   r&   r&   r'   test_fillna_intb  s    zTestFillnaPad.test_fillna_intc                 C   s   t tttdddddddtjdg}|jdd	}t tdddddddtjdtdddddddtjdtdddddddtjdg}t|| d S )
Ni              i r   r   r   )r
   r   r   r   r   r   r    r!   )r"   r   r$   r%   r&   r&   r'   $test_datetime64tz_fillna_round_issueh  s    z2TestFillnaPad.test_datetime64tz_fillna_round_issueN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   r     s   
r   )r   r   r   Znumpyr;   r=   r   Zpandasr   r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr    r   r   r&   r&   r&   r'   <module>   s   0     j