U
    sVcu                     @   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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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d0d-id-d-d.ejejgfd-d.d1d-d-d.d.ejgfed-d-ejd.ejejgfed-d0gd2d-d-d.ejejgfed-d.d1d-d-d.d.ejgfed-d.gd3d4gd2d-ejd.d-d.gfgd5d6 Zejd,ed-d.d7d8d9gd-d.d.d8d9gfed.d8d-d8d-gd-d8d.d8d-gfeed.d8d-d8d-gd.d7d8d9d-gd:d-d8d.d8d-gfgd;d< Zd=d> Z ejd?e!d@dAgejdBe"j#ejdCdDdEgdFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)dRdS Z*ejdTdUdVdWdUgdVdUdVdVdUgdUdVgfdUdVejdUgdVdUdVdVdUgdUdVgfgdXdY Z+dWS )Z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-xj8nt62q/pandas/tests/series/methods/test_fillna.pytest_fillna_nat   s4    z TestSeriesFillNA.test_fillna_natc              	   C   s0   d}t jt|d |jddd W 5 Q R X d S )Nz(Cannot specify both 'value' and 'method'matchr   ffill)r   r   )pytestraises
ValueErrorr   )r"   datetime_seriesmsgr&   r&   r'   test_fillna_value_or_method@   s    z,TestSeriesFillNA.test_fillna_value_or_methodc              	   C   s   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 S )N              ?       @      @      @   indexr+   r   r   backfillg      @r   z'Must specify a fill 'value' or 'method'r)   )r
   r    makeDateIndexr!   r   npNaNr9   r,   r-   r.   )r"   tsexpr0   r&   r&   r'   test_fillnaE   s    
zTestSeriesFillNA.test_fillnac                 C   s$  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|| d S )
Nr   r3   r&   r   r   )r   r      r7   r8   )r
   r<   nanr   r    r!   objectr"   s1s2resultr%   r&   r&   r'   test_fillna_nonscalarY   s*    




z&TestSeriesFillNA.test_fillna_nonscalarc                 C   sX   t dddgtd}t dtjdgtd}||}t dddgtd}t|| d S )Nr   r   r   abcZbacr4   )r
   listr<   rB   r   r    r!   rD   r&   r&   r'   test_fillna_alignsq   s
    
z#TestSeriesFillNA.test_fillna_alignsc                 C   s   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 S )Nr   r   r   r8   i  )limitr
   r<   rB   r   r    r!   r"   serrG   r%   r&   r&   r'   test_fillna_limitx   s    z"TestSeriesFillNA.test_fillna_limitc                 C   s^   dddg}|D ]J}t ddtjtjdgdd}||}t dd||dgd	d}t|| qd S )
N0z1.5z-0.3r   r   rA   float64r   rC   rM   )r"   valsvalrO   rG   r%   r&   r&   r'   test_fillna_dont_cast_strings   s    

z.TestSeriesFillNA.test_fillna_dont_cast_stringsc              	   C   s  t tdtg}|tddd}t tdtdddgdd}t|| tjtdd" |jd	d
gtddddd}W 5 Q R X t|| tjtdd" |jd	d
gtddddd}W 5 Q R X t|| |d}t tddg}t|| |	 }d|d< t|| d S )N20130101
US/Easterntz
2013-01-01rC   r   zthe 'errors' keywordr)   TFignore)errorsZfoor   )
r
   r   r   r   r    r!   assert_produces_warningFutureWarningwherer   )r"   rO   rG   r%   ser2r&   r&   r'   test_fillna_consistency   s6     
  
 
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 )Nr3   r   inferZdowncastr   rM   rN   r&   r&   r'   test_fillna_downcast   s    z%TestSeriesFillNA.test_fillna_downcastc                 C   sN  t dt}t j|d< t|}|jddd}tt dt jd}t	|| |j
dd}tddddd	gt jd}t	|| |jdd}tdddd	d	gt jd}t	|| d
|d< tddd
dd	gt jd}|jddd}t	|| |j
dd}tddd
d
d	gt jd}t	|| |jdd}tddd
d	d	gt jd}t	|| d S )Nr7   r   rb   rc   r   r   r   r   rA   g      @)r<   arangeZastyperC   rB   r
   r   Zint64r    r!   r+   r   rR   )r"   ZarrrO   resr%   r&   r&   r'   -test_fillna_downcast_infer_objects_to_numeric   s,    
z>TestSeriesFillNA.test_fillna_downcast_infer_objects_to_numericc           	   
   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	}d
}tj	t
|d* tjt|d |d W 5 Q R X 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 )NrV   2013010220130103 9:01:01r   )secondsr   i~  )daysrj   zBvalue should be a 'Timedelta', 'NaT', or array of those. Got 'int'z5In a future version, this will cast to a common dtyper)   i ʚ;zm8[ns]r   r   )r
   r   Zdiffr   r   r   r    assert_equalr,   r-   	TypeErrorr]   r^   r<   Ztimedelta64r   rB   r+   r   )	r"   frame_or_seriesrO   tdobjrG   r%   r0   Zwmsgr&   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 S )NrV   rh   ri   r   )r
   r   r<   rB   r+   r    r!   r   rN   r&   r&   r'   test_datetime64_fillnaI  s4    
z'TestSeriesFillNA.test_datetime64_fillnac              	   C   sZ   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 )Nz containing strings is deprecatedr)   z2013-08-05 15:30:00.000001r   r   r:   r   )r    r]   r^   r
   r   r   r!   )r"   r0   rO   r%   rG   r&   r&   r'   test_datetime64_fillna_backfillm  s    z0TestSeriesFillNA.test_datetime64_fillna_backfillrY   rW   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jtdd |tddd}W 5 Q R X 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:00rX   ZAAAr   z2011-01-04 10:00r   r   zdatetime64[ns, ]rV   rZ   mismatched timezoner)   
US/Pacific)r
   r   r   r   r    r!   r   rC   r   r   AssertionErrorZto_pydatetimer]   r^   )r"   rY   rO   Znull_locrG   r%   idxr&   r&   r'   test_datetime64_tz_fillna  sF   


	



		


	















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"   rO   r?   r&   r&   r'   test_fillna_dt64tz_with_methodI  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   Br8   r   )r
   r<   rB   r   r   r   r    r!   rN   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   rx   )r"   rO   rf   r?   r&   r&   r'   test_fillna_periodf  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 )NrV   rh   ri   r   Z20130104)r
   r   r<   rB   r   r    rl   r   )r"   rn   rO   rp   rG   r%   r&   r&   r'   test_fillna_dt64_timestampo  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"   rO   rT   rG   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 )Nr3   r5   zabcdr   T)r   inplacer   )r
   r<   rB   r   r   rx   r    r!   )r"   xyreturn_valuer%   r&   r&   r'   test_fillna_numeric_inplace  s    $z,TestSeriesFillNA.test_fillna_numeric_inplacezfill_value, expected_outputr   r   )r   r   rA   r   rt   r8   r   rA   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 )Nr   r   
categoriesr<   rB   r
   r   r   r    r!   r"   Z
fill_valueZexpected_outputdatarO   r?   rG   r&   r&   r'   test_fillna_categorical  s
    
z(TestSeriesFillNA.test_fillna_categoricalr   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 )Nr   r   r   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 )Nr   r   r   z3Cannot setitem on a Categorical with a new categoryr)   r   z!Length of 'value' does not match.rt   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")r   r   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame")r<   rB   r
   r   _valuesr,   r-   rm   r   r.   r   )r"   r   rO   catr0   Zmsg2r&   r&   r'   test_fillna_categorical_raises  s*    z/TestSeriesFillNA.test_fillna_categorical_raisesr   float32rR   	fill_typescalarTFc           
      C   s   t tjdg|d}t ddg|d}|r2|jd}||}t ddg|d}t|| t tjdg|d}| 	 }|||< t|| t tjdg|d}|j
||dd t|| t tjdg|d}|| |}	t|	| d S )N333333?r   r   r4   T)r   )r
   r<   rB   r   typer   r    r!   r   Zto_numpymaskr_   )
r"   r   r   r   rO   Zfill_valuesrG   r%   r   rf   r&   r&   r'   test_fillna_float_casting  s"    
z*TestSeriesFillNA.test_fillna_float_castingc                 C   sD   t tjdgtjd}|ddi}t ddgtjd}t|| d S )Nr   r   r   r   r3   )r
   r<   rB   r   r   r    r!   rN   r&   r&   r'    test_fillna_f32_upcast_with_dict  s    z1TestSeriesFillNA.test_fillna_f32_upcast_with_dictc              
   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.   strrx   )r"   r/   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   r)   r   r   r   )r   r   )r
   r<   randomrandintr,   r-   rm   r   )r"   rO   r0   r&   r&   r'   test_fillna_listlike_invalid  s    z-TestSeriesFillNA.test_fillna_listlike_invalidc                 C   sb   t dddd g}ddddg}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'\.zLimit must be greater than 0zLimit must be an integer)r   r3   r4   )r:   r   r   r+   Nr)   )rL   r   )r
   joinr,   r-   r.   r   )r"   rO   r0   rL   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}|jjdksrttjtdd ||}W 5 Q R X t |d ||d gtd}t	|| d S )NZ2020r   UTC)ZperiodsrY   r   i  r   tzinfor   rw   rX   zdateutil/US/Pacificr~   rv   r)   r   r   )r
   r   r   r   r   r   r   utcr    r!   r   r   Z
tz_convertr   kindrx   r]   r^   rC   )r"   rO   r%   rG   r>   r`   r&   r&   r'   +test_fillna_datetime64_with_timezone_tzinfo5  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-onlyr)   r   )	r
   r<   rB   floatr    r]   r^   r   r!   )r"   Zsrsr0   rG   r%   r&   r&   r'    test_fillna_pos_args_deprecationL  s    z1TestSeriesFillNA.test_fillna_pos_args_deprecationz7input, input_fillna, expected_data, expected_categoriesr   r|   Nc           
      C   sF   t |}t||}||}||}t ||d}	t||	 d S )Nr   )r   r
   r   r    Zassert_categorical_equal)
r"   inputZinput_fillnaZexpected_dataZexpected_categoriesr   rO   r$   rG   r%   r&   r&   r'   (test_fillna_categorical_accept_same_typeX  s    

z9TestSeriesFillNA.test_fillna_categorical_accept_same_type),__name__
__module____qualname__r(   r1   r@   rH   rK   rP   rU   ra   rd   rg   rq   rr   rs   r,   markZparametrizerz   r{   r}   r   r   r   r   r<   rB   r
   r   r   r   r   r   r    ZALL_REAL_NUMPY_DTYPESr   r   r   r   r   r   r   r   r&   r&   r&   r'   r      s   %
$$f$
 I	"
	 


 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 )Nr3   r5   r   r   r   r   r   r+   r   r   )r
   r<   rB   r   r9   r    r!   )r"   rO   r$   r%   r&   r&   r'   test_fillna_bugl  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 )Nr2   r3   r4   r5   r6   r7   r8   r   r+   r   )r
   r    r;   r<   r=   r!   r+   r   r"   r>   r&   r&   r'   
test_ffillv  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-onlyr)   r   )r
   r    r]   r^   r+   r!   r"   rO   r0   rG   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   r+   r    r!   )r"   r#   rG   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 )Nr2   r3   r4   r5   r6   r7   r8   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-onlyr)   r   )r
   r    r]   r^   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 )Nr3   r5   r   r   r   r   r   r   r   Tr   r   r   r   )	r
   r<   rB   r   r   rx   r    r!   isnan)r"   r   r   r%   r&   r&   r'   test_pad_nan  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
   r8   r   r   r7   r   rL   r   r   r:   r   
r<   re   r
   r   ZrandnZreindexr   rB   r    r!   r"   r9   srG   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   r8   r   r   r7   r   r   r   r   r:   r   r   r   r&   r&   r'   test_series_pad_backfill_limit  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   r+   Tr   F)r
   r<   r   r   r   rx   r    r!   )r"   rO   r   r&   r&   r'   test_fillna_int  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_issue  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   k  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      W