U
    >vfg                     @   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mZ d dlmZ d dlmZ G dd dZdd Zdd	 Zejd
ddgdd ZdS )    N)
Categorical	DataFrameDatetimeIndexNaTPeriodIndexSeriesTimedeltaIndex	Timestamp
date_rangeto_datetime)_check_mixed_floatc                   @   s  e Zd Z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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"d#gd"d"ggd$d% Zd&d' Zejd(d)d*ejd+gd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"ejd:e#e$gd;d< Z%ejd:e#e$gd=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.dOdP Z/dQdR Z0dSdT Z1dUdV Z2ej3ejd(dWdWdWdXgdYdZ Z4d[d\ Z5d]d^ Z6d_S )`
TestFillNAc                 C   s&  t tjgd ttdtgtjddgd}dddg|_|d d  }|jddidd t d	gd dtddgdddgd}dddg|_t|| |st	|j
d d d
f |j
d d d
f stt	|j
d d df |j
d d df rt|s"t	|j
d d df |j
d d df s"td S )N      foo   )ABCr   Tinplace       @r   )r   npnanr   r	   columnsfillnatmassert_frame_equalshares_memoryilocAssertionError)selfusing_copy_on_writedforigexpected r&   J/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/frame/methods/test_fillna.py*test_fillna_dict_inplace_nonunique_columns   s     $ ,,z5TestFillNA.test_fillna_dict_inplace_nonunique_columnsc                 C   s   t dt j}t|dd}|d jddd |rPt |d d df  sltn|d d df dk sltt|j	j
dkstt |j|std S )	N)(   2   F)copyr   Tr   r   )r   fullr   r   r   isnanallr    lenZ_mgrZarraysr   values)r!   r"   arrr#   r&   r&   r'   test_fillna_on_column_view.   s     z%TestFillNA.test_fillna_on_column_viewc              	   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   r   r   padmethodz'Must specify a fill 'value' or 'method'matchz(Cannot specify both 'value' and 'method'ffill)r   r   locindexr   r/   r    r.   pytestraises
ValueError)r!   datetime_frametfZzero_filledZpaddedmsgr&   r&   r'   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 )
Nr4      r   r   r   valuer6   r7   )r   r   r<   r=   r   )r!   float_string_framemfr&   r&   r'   test_fillna_mixed_typeT   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   r   Dr   rF   r   rG   r   dtyper6   r7   )reindexr   r   r<   r=   r   r   )r!   Zmixed_float_framerJ   resultr&   r&   r'   test_fillna_mixed_float\   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xrM   )r6   backfillTr8   r   r7   )r   rS   r   )r!   r#   mr&   r&   r'   test_fillna_emptyf   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cr   r   Tr   )r   r   r   r   r   r   r    )r!   r#   rQ   r%   Zreturn_valuer&   r&   r'   test_fillna_different_dtypem   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
   r   r      r   r4   i  )r   r   )r   r   r   limit)
r   r   randomrandnr   r   r+   r   r   r   r!   r#   r%   rQ   r&   r&   r'   test_fillna_limit_and_value}   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Date2rd   r   re   rG   )	r   r   r	   r+   r   r<   r=   r   r   rb   r&   r&   r'   test_fillna_datelike   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:00r6   r7   bfill)r   r	   r   r   r   r   )r!   r#   expr&   r&   r'   test_fillna_tzaware   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tzr   r   r   r   r6   r7         ?r   )r   r
   r   r   r   r   r   r!   r#   rQ   r%   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 )Nr   r   r   )
categoriesrX   rY   dcatsvalsrG   z3Cannot setitem on a Categorical with a new categoryr9   rk   rZ   r6   r7   ru   )Zsubset)r   r   r   r   r   r   r   r>   r?   	TypeErrorZdropna)r!   catrv   r#   Zcat2Zvals2Zdf_exp_fillZcat3Zvals3Zdf_exp_drop_catsZcat4Zvals4Zdf_exp_drop_allresrC   rZ   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 )Nr   rt   r   categoryrN   z2011-01-01 09:00z2016-01-01 23:45rX   rG   z2011-01M)freqz1 daysz2 days)r   r   r   r   r   r   r   r   ru   assert_series_equalrv   r   r   r   r   )
r!   rx   valr#   Zmedianry   Zv_exprz   rQ   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 )NrX   ro   r   inferZdowncastr   r   r   r   r   r   r   rp   r&   r&   r'   test_fillna_downcast  s    zTestFillNA.test_fillna_downcastc                 C   s0   |dddgdd}|j ddd}t|| d S )	Nr   r   r   objectrN    Fr   )r   r   assert_equal)r!   frame_or_seriesobjrQ   r&   r&   r'   test_fillna_downcast_false  s    z%TestFillNA.test_fillna_downcast_falsec           	      C   s   |dddgt jd}|jdt t jd}|t j}t|| |t j}|jddd}|}t|| |jdt t jd}t|| d S )Nr   r   r   rN   r   r   r   )	r   int64r   rO   Zint32astyper   r   float64)	r!   r   r   ry   r%   obj2Zres2	expected2Zres3r&   r&   r'   test_fillna_downcast_noop%  s    z$TestFillNA.test_fillna_downcast_noopr   r   r   c              	   C   sX   t tjddg|d}td  |ddi}W 5 Q R X | }d|d< t|| d S )Nr   r   r=   r   r           )r   r   r   r   assert_produces_warningr   r+   r   )r!   r   r#   rQ   r%   r&   r&   r'   -test_fillna_dictlike_value_duplicate_colnames8  s    z8TestFillNA.test_fillna_dictlike_value_duplicate_colnamesc                 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   r   r   r   r   r   rk   r4   r   r   r=   r   )r=   r   rO   r   )
r   Zdtypesr   r   rO   r   r   r   r   rangerp   r&   r&   r'   test_fillna_dtype_conversionC  s    "

z'TestFillNA.test_fillna_dtype_conversionr   r   r   ro   c                 C   s@   t dtjgddgd}|tj|}||}t|| d S )Nr   ro   r   rn   )r   r   r   replacer   r   r   )r!   r   r#   r%   rQ   r&   r&   r'   *test_fillna_dtype_conversion_equiv_replaceT  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   )rl   r   barZfoo2Zbar2r   r   r   rL   Z20130110r   ?z
2013-01-01z
2013-01-02)	r   r   r   r
   r   r   r   r	   r   rp   r&   r&   r'   test_fillna_datetime_columns[  sH    


	


	

	

	z'TestFillNA.test_fillna_datetime_columnsc                 C   sP   t j|j|jd d df< t j|j|jdd  df< t| |jdd d S )Nr4   r   r5   r;   r7   )r   r   r<   r=   r   r   r;   r   r!   rA   r&   r&   r'   
test_ffill  s     
zTestFillNA.test_ffillc                 C   sP   t j|j|jd d df< t j|j|jdd  df< t| |jdd d S )Nr4   r   r5   rg   r7   )r   r   r<   r=   r   r   rg   r   r   r&   r&   r'   
test_bfill  s     
zTestFillNA.test_bfillc                 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 Nr\   rk   r   r   r6   r4   )r8   r_   r7   r   rT   r   r   Zaranger   r`   ra   rP   r   r   r   r   r   r!   r=   r#   rQ   r%   r&   r&   r'   test_frame_pad_backfill_limit  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_limit  s    
z"TestFillNA.test_frame_fillna_limitc                 C   s(   t tjddt}|tj d S )Nr\   rk   )r   r   r`   ra   r   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 )Nr\   rk   zLimit must be greater than 0r9   r   r5   r^   	r   r   r`   ra   r   r>   r?   r@   r   r!   r   r#   rC   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 )Nr\   rk   zLimit must be an integerr9   r   g      ?r^   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|jd ddf< tj|jdd df< |jdd}||k	sRt|jddd	 t	|| |jddidd	}|d ksttj|jd ddf< tj|jdd df< |jd
d}||k	st|jd
dd t	|| d S )Nr\   rk   r   r   r   rG   TrH   r   r;   r7   rU   )
r   r   r`   ra   r   r<   r   r    r   r   r!   r#   r%   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 )Nr   r   r   rk   rX   rY   rZ   r   r4   )rX   rY   rX   rY   r]   )rX   rY   rs   zcolumn by columnr9   )axis)r   r   r   r   r+   r   r   maxZto_dictr>   r?   NotImplementedErrorrp   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 )Nr   r   r   rk   r   ZVWXYZr   r\   rE      r)   r*   <   F   P   Z   r   r4   )rX   rY   r   ZVWXuZ)r   r   r   listr   r   r   )r!   r#   Zdf2rQ   r%   r&   r&   r'   test_fillna_dataframe  s.    
	
	z TestFillNA.test_fillna_dataframec                 C   s   t jdd}t j|d d d d df< t|}|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 )Nr\   r   r;   r   )r8   r   r6   r7      r   r4   )r   r`   ra   r   r   r   Tr   r   insertr   float)r!   r2   r#   rQ   r%   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ffilr9   r7   )r>   r?   r@   r   )r!   float_framer&   r&   r'   test_fillna_invalid_method4  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   r9   r   r   tuple)r   r   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame"r   )r>   r?   rw   formatr   r   )r!   r   rC   r&   r&   r'   test_fillna_invalid_value8  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>I  s     z9TestFillNA.test_fillna_col_reordering.<locals>.<listcomp>r4   r   r,   rE   )r=   r   datar;   r7   )	r   r   r`   Zrandr   r   r   tolistr    )r!   colsr   r#   filledr&   r&   r'   test_fillna_col_reorderingH  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 )	Nr4   rE   r   rF   r   r   rG   rM   )r   r   r<   r=   r   r/   r    rP   )r!   r   rI   rJ   r   Zempty_floatrQ   r&   r&   r'   test_fill_cornerO  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 )Ncol1r   r   r   r   r   rp   r&   r&   r'   test_fillna_downcast_dict]  s    z$TestFillNA.test_fillna_downcast_dictc              	   C   s2  t tjdtjdgddtjdgtjtjtjdgtjdtjdggtdd}|jdd	dd
}|jdd	dd
}t td	dd	d	gddddtjdgtjd	tjtjgtddddgdddddddgd}t td	dd	d	gddtddd	dgddd	d	tjd	gtddddgdddddddgd}t|| t|| d S )Nr   r   r   rk   r   r4   ABCDrM   d   r   rH   r_   r   rN   r   r   )r   r   r   r   r   r   r   r   )r!   r#   rQ   Zresult2r%   r   r&   r&   r'   "test_fillna_with_columns_and_limitd  s8    	
	

z-TestFillNA.test_fillna_with_columns_and_limitc                 C   sF   t tdd gtdd gd}| }|jtjdd t|| d S )Nz
2018-05-30z
2018-09-30)Zdate1Zdate2Tr   )r   r   r+   r   r   r   r   r   r   r&   r&   r'   test_fillna_datetime_inplace  s    

z'TestFillNA.test_fillna_datetime_inplacec                 C   s   t tjdtjdgddtjdgtjtjtjdgtjdtjdggtdd}|jdd	dd
}||k	sdt|jdd	ddd t|| d S )Nr   r   r   rk   r   r4   r   rM   r   r   T)r   rH   r_   r   )r   r   r   r   r   r    r   r   r   r&   r&   r'   0test_fillna_inplace_with_columns_limit_and_value  s    
z;TestFillNA.test_fillna_inplace_with_columns_limit_and_valuer,   rS   yc                 C   s   t tjdgtjdgd}| }|d d  }|j|dd t ddgddgd}t|| |rpt|| nt|| d S )Nr   r   Tr   r,   r         )r   r   r   r+   r   r   r   )r!   r   r"   r#   Zdf_origZresult_viewr%   r&   r&   r'   test_inplace_dict_update_view  s    z(TestFillNA.test_inplace_dict_update_viewc              	   C   s   t ddtjdtjgdtjtjddgdtjdddgtjddtjd	gd
}|jdddd}t ddddgddtjdgdtjddgddddgddddggddddgd}t|| d S )Nr4   r   r\   r]   r      r   r      )r   col2col3col4r*   )r_   r   g      @g      @g      (@g      I@r   ro   g      $@r         @g      2@r   r   r   r   rM   r   rp   r&   r&   r'   )test_single_block_df_with_horizontal_axis  s$    




z4TestFillNA.test_single_block_df_with_horizontal_axisc                 C   s   t tjddgddtjgddtjgd}t dddgdddgddtjgd}t|ddi| t|ddd	| t dddgddd
gddtjgd}t|ddd| d S )Nr   r   ro   ))rS   rX   rS   rY   )r   rZ   r   rS   r,   r   )rS   r   g       )r   rS   )r   r   r   r   r   r   )r!   Zpdfr%   r&   r&   r'   "test_fillna_with_multi_index_frame  s*    




z-TestFillNA.test_fillna_with_multi_index_frameN)7__name__
__module____qualname__r(   tdZ&skip_array_manager_not_yet_implementedr3   rD   rK   rR   rW   r[   rc   rf   ri   rq   r{   r   r   r   r   r>   markparametrizer   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   Zskip_array_manager_invalid_testr   r   r   r&   r&   r&   r'   r      sb   

*$


,

#$r   c                  C   sf   t ddddgddddgddddggddd	d
gd} | jddd}|d}|   dksbtd S )Nr   ro   r   r   r   r   i1i2Zi3f1rM   r   r   )r   Zpivotr   Zisnasumr    )r#   Zdf_nonconsolrQ   r&   r&   r'   !test_fillna_nonconsolidated_frame  s    




r   c               	   C   sr   t d d gd d ggddgd} td | jddddd	 W 5 Q R X t ddgddggddgd}t| | d S )
Nr   r   rM   Fr   r   rn   Tr   )r   r   r   r   r   )r#   r%   r&   r&   r'   test_fillna_nones_inplace  s    r   funcr6   rT   c              	   C   s8   t ddddgi}tt t||   W 5 Q R X d S )NrX   r   r   r   )r   r   r   FutureWarninggetattr)r   r#   r&   r&   r'   test_pad_backfill_deprecated  s    r   )Znumpyr   r>   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.tests.frame.commonr   r   r   r   r   r   r   r&   r&   r&   r'   <module>   s   0     X