@@ -28,6 +28,38 @@ def test_merge_headers_raises_on_invalid_how_key(self, caplog, how):
2828 merge_headers (headers_left , headers_right , how = how )
2929
3030
31+ class TestTfsDataFrameMerging :
32+ @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
33+ @pytest .mark .parametrize ("how" , ["left" , "right" , "outer" , "inner" ])
34+ @pytest .mark .parametrize ("on" , ["NAME" , "S" , "NUMBER" , "CO" , "CORMS" , "BPM_RES" ])
35+ def test_correct_merging (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , how , on ):
36+ dframe_x = tfs .read (_tfs_file_x_pathlib )
37+ dframe_y = tfs .read (_tfs_file_y_pathlib )
38+ result = dframe_x .merge (dframe_y , how_headers = how_headers , how = how , on = on )
39+
40+ assert isinstance (result , TfsDataFrame )
41+ assert isinstance (result .headers , OrderedDict )
42+ assert_dict_equal (result .headers , merge_headers (dframe_x .headers , dframe_y .headers , how = how_headers ))
43+ assert_frame_equal (result , pd .DataFrame (dframe_x ).merge (pd .DataFrame (dframe_y ), how = how , on = on ))
44+
45+ @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
46+ @pytest .mark .parametrize ("how" , ["left" , "right" , "outer" , "inner" ])
47+ @pytest .mark .parametrize ("on" , ["NAME" , "S" , "NUMBER" , "CO" , "CORMS" , "BPM_RES" ])
48+ def test_merging_accepts_pandas_dataframe (
49+ self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , how , on
50+ ):
51+ dframe_x = tfs .read (_tfs_file_x_pathlib )
52+ dframe_y = pd .DataFrame (tfs .read (_tfs_file_y_pathlib )) # for test, loses headers here
53+ result = dframe_x .merge (dframe_y , how_headers = how_headers , how = how , on = on )
54+
55+ assert isinstance (result , TfsDataFrame )
56+ assert isinstance (result .headers , OrderedDict )
57+
58+ # using empty OrderedDict here as it's what dframe_y is getting when converted in the call
59+ assert_dict_equal (result .headers , merge_headers (dframe_x .headers , OrderedDict (), how = how_headers ))
60+ assert_frame_equal (result , pd .DataFrame (dframe_x ).merge (pd .DataFrame (dframe_y ), how = how , on = on ))
61+
62+
3163class TestHeadersMerging :
3264 @pytest .mark .parametrize ("how" , ["left" , "LEFT" , "Left" , "lEfT" ]) # we're case-insensitive
3365 def test_headers_merging_left (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how ):
@@ -64,16 +96,12 @@ def test_providing_new_headers_overrides_merging(self, _tfs_file_x_pathlib, _tfs
6496 dframe_x = tfs .read (_tfs_file_x_pathlib )
6597 dframe_y = tfs .read (_tfs_file_y_pathlib )
6698
67- assert dframe_x .append (other = dframe_y , new_headers = {}).headers == OrderedDict ()
68- assert dframe_y .append (other = dframe_x , new_headers = {}).headers == OrderedDict ()
69-
70- # we provide lsuffix (or rsuffix) since dframes have the same columns
71- assert dframe_x .join (other = dframe_y , lsuffix = "_l" , new_headers = {}).headers == OrderedDict ()
72- assert dframe_y .join (other = dframe_x , lsuffix = "_l" , new_headers = {}).headers == OrderedDict ()
73-
7499 assert dframe_x .merge (right = dframe_y , new_headers = {}).headers == OrderedDict ()
75100 assert dframe_y .merge (right = dframe_x , new_headers = {}).headers == OrderedDict ()
76101
102+ assert tfs .concat ([dframe_x , dframe_y ], new_headers = {}).headers == OrderedDict ()
103+ assert tfs .concat ([dframe_y , dframe_x ], new_headers = {}).headers == OrderedDict ()
104+
77105
78106class TestPrinting :
79107 def test_header_print (self ):
@@ -103,100 +131,6 @@ def test_empty_headers_print(self):
103131 assert print_tfs == print_df .replace (pd .DataFrame .__name__ , TfsDataFrame .__name__ )
104132
105133
106- class TestTfsDataFrameAppending :
107- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
108- def test_correct_appending (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers ):
109- dframe_x = tfs .read (_tfs_file_x_pathlib )
110- dframe_y = tfs .read (_tfs_file_y_pathlib )
111- result = dframe_x .append (dframe_y , how_headers = how_headers )
112-
113- assert isinstance (result , TfsDataFrame )
114- assert isinstance (result .headers , OrderedDict )
115- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , dframe_y .headers , how = how_headers ))
116- assert_frame_equal (result , pd .DataFrame (dframe_x ).append (pd .DataFrame (dframe_y )))
117-
118- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
119- def test_appending_accepts_pandas_dataframe (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers ):
120- dframe_x = tfs .read (_tfs_file_x_pathlib )
121- dframe_y = pd .DataFrame (tfs .read (_tfs_file_y_pathlib )) # for test, loses headers here
122- result = dframe_x .append (dframe_y , how_headers = how_headers )
123-
124- assert isinstance (result , TfsDataFrame )
125- assert isinstance (result .headers , OrderedDict )
126-
127- # using empty OrderedDict here as it's what dframe_y is getting when converted in the call
128- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , OrderedDict (), how = how_headers ))
129- assert_frame_equal (result , pd .DataFrame (dframe_x ).append (dframe_y )) # dframe_y already pandas
130-
131-
132- class TestTfsDataFrameJoining :
133- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
134- @pytest .mark .parametrize ("lsuffix" , ["left" , "_x" ])
135- @pytest .mark .parametrize ("rsuffix" , ["right" , "_y" ])
136- def test_correct_joining (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , lsuffix , rsuffix ):
137- dframe_x = tfs .read (_tfs_file_x_pathlib )
138- dframe_y = tfs .read (_tfs_file_y_pathlib )
139- result = dframe_x .join (dframe_y , how_headers = how_headers , lsuffix = lsuffix , rsuffix = rsuffix )
140-
141- assert isinstance (result , TfsDataFrame )
142- assert isinstance (result .headers , OrderedDict )
143- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , dframe_y .headers , how = how_headers ))
144- assert_frame_equal (
145- result , pd .DataFrame (dframe_x ).join (pd .DataFrame (dframe_y ), lsuffix = lsuffix , rsuffix = rsuffix )
146- )
147-
148- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
149- @pytest .mark .parametrize ("lsuffix" , ["left" , "_x" ])
150- @pytest .mark .parametrize ("rsuffix" , ["right" , "_y" ])
151- def test_joining_accepts_pandas_dataframe (
152- self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , lsuffix , rsuffix
153- ):
154- dframe_x = tfs .read (_tfs_file_x_pathlib )
155- dframe_y = pd .DataFrame (tfs .read (_tfs_file_y_pathlib )) # for test, loses headers here
156- result = dframe_x .join (dframe_y , how_headers = how_headers , lsuffix = lsuffix , rsuffix = rsuffix )
157-
158- assert isinstance (result , TfsDataFrame )
159- assert isinstance (result .headers , OrderedDict )
160-
161- # using empty OrderedDict here as it's what dframe_y is getting when converted in the call
162- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , OrderedDict (), how = how_headers ))
163- assert_frame_equal (
164- result , pd .DataFrame (dframe_x ).join (pd .DataFrame (dframe_y ), lsuffix = lsuffix , rsuffix = rsuffix )
165- )
166-
167-
168- class TestTfsDataFrameMerging :
169- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
170- @pytest .mark .parametrize ("how" , ["left" , "right" , "outer" , "inner" ])
171- @pytest .mark .parametrize ("on" , ["NAME" , "S" , "NUMBER" , "CO" , "CORMS" , "BPM_RES" ])
172- def test_correct_merging (self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , how , on ):
173- dframe_x = tfs .read (_tfs_file_x_pathlib )
174- dframe_y = tfs .read (_tfs_file_y_pathlib )
175- result = dframe_x .merge (dframe_y , how_headers = how_headers , how = how , on = on )
176-
177- assert isinstance (result , TfsDataFrame )
178- assert isinstance (result .headers , OrderedDict )
179- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , dframe_y .headers , how = how_headers ))
180- assert_frame_equal (result , pd .DataFrame (dframe_x ).merge (pd .DataFrame (dframe_y ), how = how , on = on ))
181-
182- @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
183- @pytest .mark .parametrize ("how" , ["left" , "right" , "outer" , "inner" ])
184- @pytest .mark .parametrize ("on" , ["NAME" , "S" , "NUMBER" , "CO" , "CORMS" , "BPM_RES" ])
185- def test_merging_accepts_pandas_dataframe (
186- self , _tfs_file_x_pathlib , _tfs_file_y_pathlib , how_headers , how , on
187- ):
188- dframe_x = tfs .read (_tfs_file_x_pathlib )
189- dframe_y = pd .DataFrame (tfs .read (_tfs_file_y_pathlib )) # for test, loses headers here
190- result = dframe_x .merge (dframe_y , how_headers = how_headers , how = how , on = on )
191-
192- assert isinstance (result , TfsDataFrame )
193- assert isinstance (result .headers , OrderedDict )
194-
195- # using empty OrderedDict here as it's what dframe_y is getting when converted in the call
196- assert_dict_equal (result .headers , merge_headers (dframe_x .headers , OrderedDict (), how = how_headers ))
197- assert_frame_equal (result , pd .DataFrame (dframe_x ).merge (pd .DataFrame (dframe_y ), how = how , on = on ))
198-
199-
200134class TestTfsDataFramesConcatenating :
201135 @pytest .mark .parametrize ("how_headers" , [None , "left" , "right" ])
202136 @pytest .mark .parametrize ("axis" , [0 , 1 ])
0 commit comments