U
    sVcMl                     @   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dS )
    N)
Categorical	DataFrameDatetimeIndexNaTPeriodIndexSeriesTimedeltaIndex	Timestamp
date_rangeto_datetime)_check_mixed_floatc                   @   s  e Zd Zej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"d:d; Z#d<d= Z$ejd>e%e&gd?d@ Z'ejd>e%e&gdAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.dOdP Z/dQdR Z0dSdT Z1dUdV Z2dWdX Z3dYdZ Z4d[d\ Z5ej6ejd(d]d]d]d^gd_d` Z7dadb Z8dcdd Z9deS )f
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-xj8nt62q/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 jddd |rLt |d d df  shtn|d d df dk shtt|j	j
dks|tt |j|std S )N)(   2   r   Tr   r   )r   fullr   r   r   isnanallr    lenZ_mgrZarraysr   values)r!   r"   Z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 )
Nr2      r   r   r   valuer4   r5   )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   rD   r   rE   r   dtyper4   r5   )reindexr   r   r:   r;   r   r   )r!   Zmixed_float_framerH   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xrK   )r4   backfillTr6   r   r5   )r   rQ   r   )r!   r#   mr&   r&   r'   test_fillna_emptyh   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#   rO   r%   Zreturn_valuer&   r&   r'   test_fillna_different_dtypeo   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   r2   i  )r   r   )r   r   r   limit)
r   r   randomrandnr   r   copyr   r   r   r!   r#   r%   rO   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Date2rc   r   rd   rE   )	r   r   r	   r`   r   r:   r;   r   r   ra   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:00r4   r5   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   r4   r5         ?r   )r   r
   r   r   r   r   r   r!   r#   rO   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   )
categoriesrV   rW   dcatsvalsrE   z3Cannot setitem on a Categorical with a new categoryr7   rj   rX   r4   r5   rt   )Zsubset)r   r   r   r   r   r   r   r<   r=   	TypeErrorZdropna)r!   catru   r#   Zcat2Zvals2Zdf_exp_fillZcat3Zvals3Zdf_exp_drop_catsZcat4Zvals4Zdf_exp_drop_allresrA   rX   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   rs   r   categoryrL   z2011-01-01 09:00z2016-01-01 23:45rV   rE   z2011-01M)freqz1 daysz2 days)r   r   r   r   r   r   r   r   rt   assert_series_equalru   r   r   r   r   )
r!   rw   valr#   Zmedianrx   Zv_expry   rO   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 )NrV   rn   r   inferZdowncastr   r   r   r   r   r   r   ro   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   objectrL    Fr   )r   r   assert_equal)r!   frame_or_seriesobjrO   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   rL   r   r   r   )	r   int64r   rM   Zint32astyper   r   float64)	r!   r   r   rx   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#   rO   r%   r&   r&   r'   -test_fillna_dictlike_value_duplicate_colnames;  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   rj   r2   r   r   r;   r   )r;   r   rM   r   )
r   Zdtypesr   r   rM   r   r~   r   r   rangero   r&   r&   r'   test_fillna_dtype_conversionF  s    "

z'TestFillNA.test_fillna_dtype_conversionr   r   r   rn   c                 C   s@   t dtjgddgd}|tj|}||}t|| d S )Nr   rn   r   rm   )r   r   r   replacer   r   r   )r!   r   r#   r%   rO   r&   r&   r'   *test_fillna_dtype_conversion_equiv_replaceW  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+   ri   r   )rk   r   barZfoo2Zbar2r   r   r   rJ   Z20130110r   ?z
2013-01-01z
2013-01-02)	r   r   r   r
   r   r   r   r	   r   ro   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   r2   r3   r9   r5   )r   r   r   r   r9   r   r!   r?   r&   r&   r'   
test_ffill  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 )NrV   r   r   r   zSIn a future version of pandas all arguments of DataFrame.ffill will be keyword-onlyr7   r   )r   r   r   FutureWarningr9   r   r!   r#   rA   rO   r%   r&   r&   r'   test_ffill_pos_args_deprecation  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   r2   r3   rf   r5   )r   r   r   r   rf   r   r   r&   r&   r'   
test_bfill  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 )NrV   r   r   r   zSIn a future version of pandas all arguments of DataFrame.bfill will be keyword-onlyr7   r   )r   r   r   r   rf   r   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 NrZ   rj   r   r   r4   r2   )r6   r]   r5   r   rR   r   r   Zaranger   r^   r_   rN   r   r   r   r   r   r!   r;   r#   rO   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 )NrZ   rj   )r   r   r^   r_   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 )NrZ   rj   zLimit must be greater than 0r7   r   r3   r\   	r   r   r^   r_   r   r<   r=   r>   r   r!   r   r#   rA   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 )NrZ   rj   zLimit must be an integerr7   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|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 )NrZ   rj   r   r   r   rE   TrF   r   r9   r5   rS   )	r   r   r^   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   rj   rV   rW   rX   r   r2   )rV   rW   rV   rW   r[   )rV   rW   rr   zcolumn by columnr7   )axis)r   r   r   r   r`   r   r   maxZto_dictr<   r=   NotImplementedErrorro   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   rj   r   ZVWXYZr   rZ   rC      r)   r*   <   F   P   Z   r   r2   )rV   rW   r   ZVWXuZ)r   r   r   listr   r   r   )r!   r#   Zdf2rO   r%   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 )NrZ   r   r9   r   )r6   r   r4   r5      r   r2   )r   r   r^   r_   r   r0   r   Tr   r   insertr   floatro   r&   r&   r'   test_fillna_columnsA  s    zTestFillNA.test_fillna_columnsc              	   C   s*   t jtdd |jdd W 5 Q R X d S )NZffilr7   r5   )r<   r=   r>   r   )r!   float_framer&   r&   r'   test_fillna_invalid_methodN  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   r7   r   r   tuple)r   r   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame"r   )r<   r=   rv   formatr   r   )r!   r   rA   r&   r&   r'   test_fillna_invalid_valueR  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>c  s     z9TestFillNA.test_fillna_col_reordering.<locals>.<listcomp>r2   r   r+   rC   )r;   r   datar9   r5   )	r   r   r^   Zrandr   r   r   tolistr    )r!   colsr   r#   filledr&   r&   r'   test_fillna_col_reorderingb  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 )	Nr2   rC   r   rD   r   r   rE   rK   )r   r   r:   r;   r   r.   r    rN   )r!   r   rG   rH   r   Zempty_floatrO   r&   r&   r'   test_fill_corneri  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   ro   r&   r&   r'   test_fillna_downcast_dictw  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 )	NrV   r   r   r   rL   ztIn a future version of pandas all arguments of DataFrame.fillna except for the argument 'value' will be keyword-onlyr7   r   )	r   r   r   r   r   r   r   r   r   r   r&   r&   r'    test_fillna_pos_args_deprecation~  s    z+TestFillNA.test_fillna_pos_args_deprecationc              	   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   rj   r   r2   ABCDrK   d   r   rF   r]   r   rL   r   r   )r   r   r   r   r   r   r   r   )r!   r#   rO   Zresult2r%   r   r&   r&   r'   "test_fillna_with_columns_and_limit  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   rj   r   r2   r   rK   r   r   T)r   rF   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+   rQ   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 )Nr2   r   rZ   r[   r      r   r      )r   col2col3col4r*   )r]   r   g      @g      @g      (@g      I@r   rn   g      $@r         @g      2@r   r   r   r   rK   r   ro   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   rn   ))rQ   rV   rQ   rW   )r   rX   r   rQ   r+   r   )rQ   r   g       )r   rQ   )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):__name__
__module____qualname__tdZ&skip_array_manager_not_yet_implementedr(   r1   rB   rI   rP   rU   rY   rb   re   rh   rp   rz   r   r   r   r   r<   markZ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   r   r   r   Zskip_array_manager_invalid_testr   r   r   r&   r&   r&   r'   r      sj   

	+$


,

#$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   rn   r   r   r   r   i1i2Zi3f1rK   r   r   )r   Zpivotr   Zisnasumr    )r#   Zdf_nonconsolrO   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   rK   Fr   r   rm   Tr   )r   r   r   r   r   )r#   r%   r&   r&   r'   test_fillna_nones_inplace  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'   <module>   s   0     ~