@@ -98,6 +98,18 @@ def _run_error_test(
9898 f'Expected { expected_error !r} to be raised, but got { actual !r} '
9999 ) from actual
100100
101+ def _run_inplace_test (self , func , arg , ** kwargs ):
102+ """Verify an inplace operation performed by func.
103+
104+ Checks that func performs the same inplace operation on arg, in pandas and
105+ in Beam."""
106+ def wrapper (df ):
107+ df = df .copy ()
108+ func (df )
109+ return df
110+
111+ self ._run_test (wrapper , arg , ** kwargs )
112+
101113 def _run_test (self , func , * args , distributed = True , nonparallel = False ):
102114 """Verify that func(*args) produces the same result in pandas and in Beam.
103115
@@ -185,13 +197,12 @@ def test_get_column(self):
185197 def test_set_column (self ):
186198 def new_column (df ):
187199 df ['NewCol' ] = df ['Speed' ]
188- return df
189200
190201 df = pd .DataFrame ({
191202 'Animal' : ['Falcon' , 'Falcon' , 'Parrot' , 'Parrot' ],
192203 'Speed' : [380. , 370. , 24. , 26. ]
193204 })
194- self ._run_test (new_column , df )
205+ self ._run_inplace_test (new_column , df )
195206
196207 def test_str_split (self ):
197208 s = pd .Series ([
@@ -212,13 +223,12 @@ def test_str_split(self):
212223 def test_set_column_from_index (self ):
213224 def new_column (df ):
214225 df ['NewCol' ] = df .index
215- return df
216226
217227 df = pd .DataFrame ({
218228 'Animal' : ['Falcon' , 'Falcon' , 'Parrot' , 'Parrot' ],
219229 'Speed' : [380. , 370. , 24. , 26. ]
220230 })
221- self ._run_test (new_column , df )
231+ self ._run_inplace_test (new_column , df )
222232
223233 def test_tz_localize_ambiguous_series (self ):
224234 # This replicates a tz_localize doctest:
@@ -706,11 +716,7 @@ def test_dataframe_eval_query(self):
706716 self ._run_test (lambda df : df .eval ('foo = a + b - c' ), df )
707717 self ._run_test (lambda df : df .query ('a > b + c' ), df )
708718
709- def eval_inplace (df ):
710- df .eval ('foo = a + b - c' , inplace = True )
711- return df .foo
712-
713- self ._run_test (eval_inplace , df )
719+ self ._run_inplace_test (lambda df : df .eval ('foo = a + b - c' ), df )
714720
715721 # Verify that attempting to access locals raises a useful error
716722 deferred_df = frame_base .DeferredFrame .wrap (
@@ -726,9 +732,8 @@ def test_index_name_assignment(self):
726732
727733 def change_index_names (df ):
728734 df .index .names = ['A' , None ]
729- return df
730735
731- self ._run_test (change_index_names , df )
736+ self ._run_inplace_test (change_index_names , df )
732737
733738 @parameterized .expand ((x , ) for x in [
734739 0 ,
@@ -1046,6 +1051,14 @@ def test_dataframe_sum_nonnumeric_raises(self):
10461051 # projecting only numeric columns should too
10471052 self ._run_test (lambda df : df [['foo' , 'bar' ]].sum (), GROUPBY_DF )
10481053
1054+ def test_insert (self ):
1055+ df = pd .DataFrame ({"A" : [1 , 2 , 3 ], "B" : [4 , 5 , 6 ]})
1056+
1057+ self ._run_inplace_test (lambda df : df .insert (1 , 'C' , df .A * 2 ), df )
1058+ self ._run_inplace_test (
1059+ lambda df : df .insert (0 , 'foo' , pd .Series ([8 ], index = [1 ])), df )
1060+ self ._run_inplace_test (lambda df : df .insert (2 , 'bar' , value = 'q' ), df )
1061+
10491062
10501063class AllowNonParallelTest (unittest .TestCase ):
10511064 def _use_non_parallel_operation (self ):
0 commit comments