54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import numpy as np
 | |
| 
 | |
| from pandas import (
 | |
|     DataFrame,
 | |
|     Series,
 | |
|     period_range,
 | |
| )
 | |
| import pandas._testing as tm
 | |
| 
 | |
| 
 | |
| def test_iat(float_frame):
 | |
|     for i, row in enumerate(float_frame.index):
 | |
|         for j, col in enumerate(float_frame.columns):
 | |
|             result = float_frame.iat[i, j]
 | |
|             expected = float_frame.at[row, col]
 | |
|             assert result == expected
 | |
| 
 | |
| 
 | |
| def test_iat_duplicate_columns():
 | |
|     # https://github.com/pandas-dev/pandas/issues/11754
 | |
|     df = DataFrame([[1, 2]], columns=["x", "x"])
 | |
|     assert df.iat[0, 0] == 1
 | |
| 
 | |
| 
 | |
| def test_iat_getitem_series_with_period_index():
 | |
|     # GH#4390, iat incorrectly indexing
 | |
|     index = period_range("1/1/2001", periods=10)
 | |
|     ser = Series(np.random.default_rng(2).standard_normal(10), index=index)
 | |
|     expected = ser[index[0]]
 | |
|     result = ser.iat[0]
 | |
|     assert expected == result
 | |
| 
 | |
| 
 | |
| def test_iat_setitem_item_cache_cleared(
 | |
|     indexer_ial, using_copy_on_write, warn_copy_on_write
 | |
| ):
 | |
|     # GH#45684
 | |
|     data = {"x": np.arange(8, dtype=np.int64), "y": np.int64(0)}
 | |
|     df = DataFrame(data).copy()
 | |
|     ser = df["y"]
 | |
| 
 | |
|     # previously this iat setting would split the block and fail to clear
 | |
|     #  the item_cache.
 | |
|     with tm.assert_cow_warning(warn_copy_on_write):
 | |
|         indexer_ial(df)[7, 0] = 9999
 | |
| 
 | |
|     with tm.assert_cow_warning(warn_copy_on_write):
 | |
|         indexer_ial(df)[7, 1] = 1234
 | |
| 
 | |
|     assert df.iat[7, 1] == 1234
 | |
|     if not using_copy_on_write:
 | |
|         assert ser.iloc[-1] == 1234
 | |
|     assert df.iloc[-1, -1] == 1234
 |