U
    *ifY                     @   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                   @   s  e Z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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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 Z2dWS )X
TestFillNAc                 C   sn   t dt j}t|}|d jddd |d d df dk sDtt|jj	dksXtt 
|j|sjtd S )N)(   2   r   Tinplace   )npfullnanr   fillnaallAssertionErrorlenZ_mgrZarraysZshares_memoryvalues)selfZarrdf r   Y/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/frame/methods/test_fillna.py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   Ar   padmethodz'Must specify a fill 'value' or 'method'matchz(Cannot specify both 'value' and 'method'ffill)r   r   locindexr   r   r   isnanpytestraises
ValueError)r   datetime_frametfZzero_filled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 )
Nr       foor!   r   valuer#   r$   )r   r   r)   r*   r   )r   float_string_framemfr   r   r   test_fillna_mixed_type8   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columnsr6   r   r7   Cdtyper#   r$   )reindexr   r   r)   r*   r   r   )r   Zmixed_float_framer:   resultr   r   r   test_fillna_mixed_floatA   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xr>   )r#   backfillTr%   r   r$   )r   rF   r   )r   r   mr   r   r   test_fillna_emptyL   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   r5   Tr   )r   r   r   r   tmassert_frame_equalr   )r   r   rD   expectedZreturn_valuer   r   r   test_fillna_different_dtypeS   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
      rN      r   r    i  )rN   r   )rT   rN   r   limit)
r   r   randomrandnr   iloccopyr   rO   rP   r   r   rQ   rD   r   r   r   test_fillna_limit_and_valuec   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Date2r^   r   r_   r7   )	r   r   r	   r[   r   r)   r*   rO   rP   r\   r   r   r   test_fillna_datelikeo   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   rO   rP   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   rN   r!   r<   r#   r$         ?       @)r   r
   r   r   r   rO   rP   r   r   rD   rQ   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   rN   rT   )
categoriesrK   rL   dcatsvalsr7   z3Cannot setitem on a Categorical with a new categoryr&   re   rM   r#   r$   rp   )Zsubset)r   r   r   r   r   rO   rP   r,   r-   	TypeErrorZdropna)r   catrq   r   cat2Zvals2Zdf_exp_fillZcat3Zvals3Zdf_exp_drop_catsZcat4Zvals4Zdf_exp_drop_allresr2   rM   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 )NrN   ro   rj   categoryrA   z2011-01-01 09:00z2016-01-01 23:45rK   r7   z2011-01M)freqz1 daysz2 days)r   r   r   r   r   r   rO   rP   rp   assert_series_equalrq   r   r   r   r   )
r   rs   valr   Zmedianru   Zv_exprv   rD   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 )NrK   ri   r   ZinferZdowncastr   r   r   r   r   rO   rP   rk   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   rN   rT   objectrA    Fr   )r   rO   Zassert_equal)r   Zframe_or_seriesobjrD   r   r   r   test_fillna_downcast_false  s    z%TestFillNA.test_fillna_downcast_falser?   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!   g        )r   r   r   rO   assert_produces_warningr   r[   rP   )r   r?   r   rD   rQ   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   rN   rT   re   r    r   r   r*   float64)r*   r?   rB   r   )
r   Zdtypesr   r   rB   rO   r{   r   rP   rangerk   r   r   r   test_fillna_dtype_conversion  s    "

z'TestFillNA.test_fillna_dtype_conversionr|   r   r   ri   c                 C   s@   t dtjgddgd}|tj|}||}t|| d S )Nr   ri   rj   rh   )r   r   r   replacer   rO   rP   )r   r|   r   rQ   rD   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   rd   rT   )rf   r5   barZfoo2Zbar2r!   r<   r@   r=   Z20130110r   ?z
2013-01-01z
2013-01-02)	r   r   r   r
   r   rO   rP   r	   r   rk   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   rO   rP   r(   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 )NrK   r   rN   rT   zSIn a future version of pandas all arguments of DataFrame.ffill will be keyword-onlyr&   r   )r   rO   r   FutureWarningr(   rP   r   r   r2   rD   rQ   r   r   r   test_ffill_pos_args_deprecationc  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"   ra   r$   )r   r   rO   rP   ra   r   r   r   r   r   
test_bfillo  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 )NrK   r   rN   rT   zSIn a future version of pandas all arguments of DataFrame.bfill will be keyword-onlyr&   r   )r   rO   r   r   ra   rP   r   r   r   r   test_bfill_pos_args_deprecationw  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 NrS   re   r   rN   r#   r    )r%   rW   r$   r   rG   rT   r   Zaranger   rX   rY   rC   r   r   rZ   rO   rP   r   r*   r   rD   rQ   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 )NrS   re   )r   r   rX   rY   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 )NrS   re   zLimit must be greater than 0r&   r   r"   rV   	r   r   rX   rY   r   r,   r-   r.   r   r   r   r   r2   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 )NrS   re   zLimit must be an integerr&   r   g      ?rV   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 )NrS   re   r   rT   r   r7   T)r8   r   r(   r$   rH   )	r   r   rX   rY   r   r   r   rO   rP   r   r   rQ   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   rN   rT   re   rK   rL   rM   r   r    )rK   rL   rK   rL   rU   )rK   rL   rn   zcolumn by columnr&   )axis)r   r   r   r   r[   rO   rP   maxto_dictr,   r-   NotImplementedErrorrk   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   rN   rT   re   r   ZVWXYZr   rS   r4      r   r   <   F   P   Z   r   r    )rK   rL   r5   ZVWXuZ)r   r   r   listr   rO   rP   )r   r   Zdf2rD   rQ   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 )NrS   rN   r(   r   )r%   r   r#   r$      r5   r    )r   r   rX   rY   r   r   r   TrO   rP   insertr   floatrk   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&   r   rN   tuple)r   rN   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame"r   )r,   r-   rr   formatr   rZ   )r   r   r2   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>4  s     z9TestFillNA.test_fillna_col_reordering.<locals>.<listcomp>r    r   r   r4   )r*   r?   datar(   r$   )	r   r   rX   Zrandr   r   r?   tolistr   )r   colsr   r   filledr   r   r   test_fillna_col_reordering3  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    r4   r5   r6   r!   r   r7   r>   )r   r   r)   r*   r   r   r   rC   )r   r   r9   r:   r   Zempty_floatrD   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col1r   rN   Zint64r   r   rk   r   r   r   test_fillna_downcast_dictH  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 )	NrK   r   rN   rT   rA   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   rO   r   r   r   rP   r   r   r   r    test_fillna_pos_args_deprecationO  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 )NrN   r   rT   re   r   r    ABCDr>   d   r   r8   rW   r   rA   r   r   )r   r   r   r   r   r   rO   rP   )r   r   rD   Zresult2rQ   Z	expected2r   r   r   "test_fillna_with_columns_and_limit[  s8    	
	

z-TestFillNA.test_fillna_with_columns_and_limitc                 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 )NrN   r   rT   re   r   r    r   r>   r   r   T)r   r8   rW   r   )r   r   r   r   r   r   rO   rP   r   r   r   r   0test_fillna_inplace_with_columns_limit_and_value  s    
z;TestFillNA.test_fillna_inplace_with_columns_limit_and_valueN)3__name__
__module____qualname__tdZ&skip_array_manager_not_yet_implementedr   r3   r;   rE   rJ   rR   r]   r`   rc   rl   rw   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   r   r   r   r      sX   
	+$


,

#$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 )Nr   ri   rN   rj   rT   g      @i1i2Zi3f1r>   r   )r   Zpivotr   Zisnasumr   )r   Zdf_nonconsolrD   r   r   r   !test_fillna_nonconsolidated_frame  s    




r   )numpyr   r,   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingrO   Zpandas.tests.frame.commonr   r   r   r   r   r   r   <module>   s   ,     