U
    f/eO                     @   s   d dl Zd dlZd dlm  mZ d dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZ G dd dZdd ZdS )    N)	Categorical	DataFrameDatetimeIndexNaTPeriodIndexSeriesTimedeltaIndex	Timestamp
date_range)_check_mixed_floatc                   @   sp  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ejdd Zejdd Zejejdddejdgdd  Zejd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Z ejd1e!e"gd2d3 Z#ejd1e!e"gd4d5 Z$d6d7 Z%d8d9 Z&d:d; Z'd<d= Z(d>d? Z)d@dA Z*dBdC Z+dDdE Z,dFdG Z-dHdI Z.dJS )K
TestFillNAc              	   C   s"  |}t j|j|jd d df< t j|j|jdd  df< |d}|j|jd d df dk sft|jdd}t |j|jd d df  st|j|jdd  df |j|jd df k std}tj	t
|d |  W 5 Q R X d	}tj	t
|d |jdd
d W 5 Q R X d S )N   Ar   padmethodz'Must specify a fill 'value' or 'method'matchz(Cannot specify both 'value' and 'method'ffill)npnanlocindexfillnaallAssertionErrorisnanpytestraises
ValueError)selfdatetime_frametfZzero_filledZpaddedmsg r%   J/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/frame/methods/test_fillna.pytest_fillna_datetime   s    
$&*
zTestFillNA.test_fillna_datetimec                 C   sT   |}t j|j|jdd df< t j|j|jdd  df< |jdd |jdd	 d S )
Nr      foor   r   valuer   r   )r   r   r   r   r   )r!   float_string_framemfr%   r%   r&   test_fillna_mixed_type+   s
    z!TestFillNA.test_fillna_mixed_typec                 C   sh   |j dddgd}tj|j|jdd  df< |jdd}t|dd id	 |jd
d}t|dd id	 d S )Nr   BDcolumnsr*   r   r+   Cdtyper   r   )reindexr   r   r   r   r   r   )r!   Zmixed_float_framer.   resultr%   r%   r&   test_fillna_mixed_float4   s    z"TestFillNA.test_fillna_mixed_floatc                 C   s8   t dgd}dD ]"}|jj|dd |jj|d qd S )Nxr2   )r   backfillTr   inplacer   )r   r:   r   )r!   dfmr%   r%   r&   test_fillna_empty?   s    zTestFillNA.test_fillna_emptyc                 C   s   t ddtjdgddtjdgddtjdgg}|ddi}t ddddgddddgddddgg}t|| |jddidd}t|| |d kstd S )Nabc   r)   T)r=   )r   r   r   r   tmassert_frame_equalr   )r!   r>   r8   expectedZreturn_valuer%   r%   r&   test_fillna_different_dtypeF   s    & z&TestFillNA.test_fillna_different_dtypec                 C   st   t tjdd}tj|jdddf< tj|jdddf< | }d|jd< d|jd	< |jdd
d}t	|| d S )N
      rD      r   r   i  )rD   r   )rJ   rD      limit)
r   r   randomrandnr   iloccopyr   rE   rF   r!   r>   rG   r8   r%   r%   r&   test_fillna_limit_and_valueV   s    

z&TestFillNA.test_fillna_limit_and_valuec                 C   sl   t ttdgtdtgd}| }|d |j|jd df |d< |jd|d id}t|| d S )Nz2014-1-1z2013-1-1)DateDate2rU   r   rV   r+   )	r   r   r	   rR   r   r   r   rE   rF   rS   r%   r%   r&   test_fillna_datelikeb   s    

"zTestFillNA.test_fillna_datelikec                 C   s   t dtdtgi}t dtdtdgi}t|jdd| t dttdgi}t dtdtdgi}t|jdd| d S )Nr   z2012-11-11 00:00:00+01:00r   r   bfill)r   r	   r   rE   rF   r   )r!   r>   expr%   r%   r&   test_fillna_tzawareq   s$    zTestFillNA.test_fillna_tzawarec                 C   s`   t tddddddtjtjgd}|jdd	}t tddddd
dddgd}t|| d S )N20130101   z
US/Eastern)periodstzrL   rD   r   r0   r   r         ?       @)r   r
   r   r   r   rE   rF   r!   r>   r8   rG   r%   r%   r&   $test_fillna_tzaware_different_column   s    
z/TestFillNA.test_fillna_tzaware_different_columnc              	   C   s  t dddtjgdddgd}ddtjdg}t||d}t ddddgdddgd}ddddg}t||d}t dddgdddgd}ddtjg}t||d}	t ddgdddgd}
ddg}t|
|d}|jdddd	}t|| d
}tjt	|d |jdddd	 W 5 Q R X |jdd}t|| |j
dgd}t||	 |
 }t|| t tjdtjgddgd}t|dddgd}t dddgddgd}t|dddgd}|d}t|| d S )NrL   rD   rJ   )
categoriesrA   rB   dcatsvalsr+   z3Cannot setitem on a Categorical with a new categoryr   r\   rC   r   r   rg   )Zsubset)r   r   r   r   r   rE   rF   r   r   r    Zdropna)r!   catrh   r>   Zcat2Zvals2Zdf_exp_fillZcat3Zvals3Zdf_exp_drop_catsZcat4Zvals4Zdf_exp_drop_allresr$   rC   Zcat_expdf_expr%   r%   r&   test_na_actions_categorical   s:    
z&TestFillNA.test_na_actions_categoricalc           
      C   sd  t tjdtjg}t tjtjtjg}t||d}tdtjd}||}tjtjtjg}tdddg|ddd}t|| |jtj}t	||j |j
tj}t	||j
 tdddttg}	tdt |	i}t|jtd	| td
d
d
ttgdd}	tdt |	i}t|jtd	| tdddttg}	tdt |	i}t|jtd	| d S )NrD   rf   ra   categoryr5   z2011-01-01 09:00z2016-01-01 23:45rA   r+   z2011-01M)freqz1 daysz2 days)r   r   r   r   r   r   rE   rF   rg   assert_series_equalrh   r   r   r   r   )
r!   ri   valr>   Zmedianrj   Zv_exprk   r8   idxr%   r%   r&   test_fillna_categorical_nan   s.    
z&TestFillNA.test_fillna_categorical_nanc                 C   s   t ddtjgi}|jddd}t dddgi}t|| t ddtjgi}|jddidd}t dddgi}t|| d S )NrA   r`   r   ZinferZdowncastrL   r   r   r   r   rE   rF   rb   r%   r%   r&   test_fillna_downcast   s    zTestFillNA.test_fillna_downcastc                 C   s   t dddgdddddgd	}|j}ttd
gd dddddgd}t|| |d}t ddddgdddddgd	}t|| t t	dddgdd}|d}t dt	dddgd	}t|| d S )Nr   r0   r4   rL   rD   rJ   r\   r   )r   r3   objectr   Zfloat64)r   r3   r6   r   )
r   Zdtypesr   r   r6   rE   rp   r   rF   rangerb   r%   r%   r&   test_fillna_dtype_conversion   s    "

z'TestFillNA.test_fillna_dtype_conversionrq    rL   r`   c                 C   s@   t dtjgddgd}|tj|}||}t|| d S )NrL   r`   ra   r_   )r   r   r   replacer   rE   rF   )r!   rq   r>   rG   r8   r%   r%   r&   *test_fillna_dtype_conversion_equiv_replace  s    
z5TestFillNA.test_fillna_dtype_conversion_equiv_replacec                 C   s   t ddtjgtdddddd gdd	d gd
tdddd}|d}t dddgtddddddgdd	dgd
tdddd}t|| t ddtjgtdtdtgddd gdd	d gd
tdddd}|d}t dddgtdtddgdddgdd	dgd
tdddd}t|| d S )Nr[   rJ   )r]   r)   barZfoo2Zbar2)r   r0   r4   r1   Z20130110rx   ?z
2013-01-01z
2013-01-02)	r   r   r   r
   r   rE   rF   r	   r   rb   r%   r%   r&   test_fillna_datetime_columns  sH    


	


	

	

	z'TestFillNA.test_fillna_datetime_columnsc                 C   s@   t j|d d d< t j|d dd < t| |jdd d S )Nr   r   r   r   r   )r   r   rE   rF   r   r   r!   r"   r%   r%   r&   
test_ffillA  s     
zTestFillNA.test_ffillc              	   C   s\   t ddddgi}d}tjt|d |d}W 5 Q R X t ddddgi}t|| d S )NrA   rL   rD   rJ   zSIn a future version of pandas all arguments of DataFrame.ffill will be keyword-onlyr   r   )r   rE   assert_produces_warningFutureWarningr   rF   r!   r>   r$   r8   rG   r%   r%   r&   test_ffill_pos_args_deprecationI  s    z*TestFillNA.test_ffill_pos_args_deprecationc                 C   s@   t j|d d d< t j|d dd < t| |jdd d S )Nr   r   r   rX   r   )r   r   rE   rF   rX   r   r   r%   r%   r&   
test_bfillU  s     
zTestFillNA.test_bfillc              	   C   s\   t ddddgi}d}tjt|d |d}W 5 Q R X t ddddgi}t|| d S )NrA   rL   rD   rJ   zSIn a future version of pandas all arguments of DataFrame.bfill will be keyword-onlyr   r   )r   rE   r   r   rX   rF   r   r%   r%   r&   test_bfill_pos_args_deprecation]  s    z*TestFillNA.test_bfill_pos_args_deprecationc                 C   s   t d}tt jdd|d}|d d j|ddd}|d d |jdd}t j|jd	d < t	
|| |d
d  j|ddd}|d
d  |jdd}t j|jd d< t	
|| d S NrI   r\   rx   rD   r   r   )r   rN   r   r   r;   rJ   r   Zaranger   rO   rP   r7   r   r   rQ   rE   rF   r!   r   r>   r8   rG   r%   r%   r&   test_frame_pad_backfill_limiti  s    
z(TestFillNA.test_frame_pad_backfill_limitc                 C   s   t d}tt jdd|d}|d d |}|jddd}|d d |jdd}t j|jd	d < t	
|| |d
d  |}|jddd}|d
d  |jdd}t j|jd d< t	
|| d S r   r   r   r%   r%   r&   test_frame_fillna_limity  s    
z"TestFillNA.test_frame_fillna_limitc                 C   s(   t tjddt}|tj d S )NrI   r\   )r   r   rO   rP   astypeintr   r   )r!   r>   r%   r%   r&   test_fillna_skip_certain_blocks  s    z*TestFillNA.test_fillna_skip_certain_blockstypec              	   C   sH   t tjdd|}d}tjt|d |jddd W 5 Q R X d S )NrI   r\   zLimit must be greater than 0r   r   r   rM   	r   r   rO   rP   r   r   r   r    r   r!   r   r>   r$   r%   r%   r&   test_fillna_positive_limit  s    z%TestFillNA.test_fillna_positive_limitc              	   C   sH   t tjdd|}d}tjt|d |jddd W 5 Q R X d S )NrI   r\   zLimit must be an integerr   r   g      ?rM   r   r   r%   r%   r&   test_fillna_integer_limit  s    z$TestFillNA.test_fillna_integer_limitc                 C   s   t tjdd}tj|d d d< tj|d dd < |jdd}||k	sNt|jddd	 t|| |jddidd	}|d ksttj|d d d< tj|d dd < |jd
d}||k	st|jd
dd t|| d S )NrI   r\   rL   rJ   r   r+   T)r,   r=   r   r   r<   )	r   r   rO   rP   r   r   r   rE   rF   )r!   r>   rG   r%   r%   r&   test_fillna_inplace  s    zTestFillNA.test_fillna_inplacec              	   C   s   t tjddtjtjgdddtjtjgtjddddgd}|ddd}| }|d	 d|d	< |d
 d|d
< t|| |dddd}|| }||  }t|| t	j
tdd |j|ddd W 5 Q R X d S )NrL   rD   rJ   r\   rA   rB   rC   r   r   )rA   rB   rA   rB   rK   )rA   rB   re   zcolumn by columnr   )axis)r   r   r   r   rR   rE   rF   maxZto_dictr   r   NotImplementedErrorrb   r%   r%   r&   test_fillna_dict_series  s"    z"TestFillNA.test_fillna_dict_seriesc                 C   s   t tjddtjtjgdddtjtjgtjddddgdtdd}t tjdd	d
dgdddddgdgd dtdd}||}t tjddtjdgdddtjdgtjddddgdtdd}t|| d S )NrL   rD   rJ   r\   r   ZVWXYZrx   rI   r(      (   2   <   F   P   Z   r   r   )rA   rB   r)   ZVWXuZ)r   r   r   listr   rE   rF   )r!   r>   Zdf2r8   rG   r%   r%   r&   test_fillna_dataframe  s.    
	
	z TestFillNA.test_fillna_dataframec                 C   s   t tjdd}tj|jd d d d df< |jddd}|jjddj}t	|| |
dd	d
 |jddd}|tjddd}t	|| d S )NrI   rD   r   rL   )r   r   r   r      r)   r   )r   r   rO   rP   r   valuesr   TrE   rF   insertr   floatrb   r%   r%   r&   test_fillna_columns  s    zTestFillNA.test_fillna_columnsc              	   C   s*   t jtdd |jdd W 5 Q R X d S )NZffilr   r   )r   r   r    r   )r!   float_framer%   r%   r&   test_fillna_invalid_method  s    z%TestFillNA.test_fillna_invalid_methodc              	   C   s   d}t jt|dd |ddg W 5 Q R X t jt|dd |d W 5 Q R X d}t jt|d |jd d d	f | W 5 Q R X d S )
NzA"value" parameter must be a scalar or dict, but you passed a "{}"r   r   rL   rD   tuple)rL   rD   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame"r   )r   r   	TypeErrorformatr   rQ   )r!   r   r$   r%   r%   r&   test_fillna_invalid_value	  s    z$TestFillNA.test_fillna_invalid_valuec                 C   s^   dd t dddD }tjdd}tt d||d}|jdd	}|j |j ksZtd S )
Nc                 S   s   g | ]}d t | qS )zCOL.)str).0ir%   r%   r&   
<listcomp>  s     z9TestFillNA.test_fillna_col_reordering.<locals>.<listcomp>r   r   r~   r(   )r   r3   datar   r   )	ry   r   rO   Zrandr   r   r3   tolistr   )r!   colsr   r>   filledr%   r%   r&   test_fillna_col_reordering  s
    z%TestFillNA.test_fillna_col_reorderingc                 C   s   |}t j|j|jdd df< t j|j|jdd  df< |jdd}|j|jdd df dk sht|d= |jg d}|jdd}d S )	Nr   r(   r)   r*   r   r   r+   r2   )r   r   r   r   r   r   r   r7   )r!   r   r-   r.   r   Zempty_floatr8   r%   r%   r&   test_fill_corner   s    $zTestFillNA.test_fill_cornerc                 C   sH   t ddtjgi}|jddiddid}t dddgi}t|| d S )NZcol1rL   rD   Zint64rt   ru   rb   r%   r%   r&   test_fillna_downcast_dict.  s    z$TestFillNA.test_fillna_downcast_dictc              	   C   sn   t ddddtjgitd}d}tjt|d |dd d }W 5 Q R X t dddddgitd}t|| d S )	NrA   rL   rD   rJ   r5   ztIn a future version of pandas all arguments of DataFrame.fillna except for the argument 'value' will be keyword-onlyr   r   )	r   r   r   r   rE   r   r   r   rF   r   r%   r%   r&    test_fillna_pos_args_deprecation5  s    z+TestFillNA.test_fillna_pos_args_deprecationN)/__name__
__module____qualname__r'   r/   r9   r@   rH   rT   rW   rZ   rc   rl   rs   tdZ&skip_array_manager_not_yet_implementedrv   rz   r   markZparametrizer   r   r}   Zskip_array_manager_invalid_testr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r      sR   	+$


,

#r   c                  C   sd   t ddddgddddgddddggddd	d
gd} | dd}|d}|   dks`td S )NrL   r`   rD   ra   rJ   g      @i1i2Zi3f1r2   r   )r   Zpivotr   Zisnasumr   )r>   Zdf_nonconsolr8   r%   r%   r&   !test_fillna_nonconsolidated_frameB  s    




r   )Znumpyr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingrE   Zpandas.tests.frame.commonr   r   r   r%   r%   r%   r&   <module>   s   ,    1