File tree 2 files changed +10
-11
lines changed
2 files changed +10
-11
lines changed Original file line number Diff line number Diff line change @@ -896,12 +896,6 @@ def _maybe_coerce_merge_keys(self):
896
896
if lk .is_dtype_equal (rk ):
897
897
continue
898
898
899
- # if we are dates with differing categories
900
- # then allow them to proceed because
901
- # coercing to object below results in integers.
902
- if is_datetimelike (lk .categories ) and is_datetimelike (rk .categories ):
903
- continue
904
-
905
899
elif is_categorical_dtype (lk ) or is_categorical_dtype (rk ):
906
900
pass
907
901
@@ -923,11 +917,13 @@ def _maybe_coerce_merge_keys(self):
923
917
# Houston, we have a problem!
924
918
# let's coerce to object
925
919
if name in self .left .columns :
920
+ typ = lk .categories .dtype if is_categorical_dtype (lk ) else object
926
921
self .left = self .left .assign (
927
- ** {name : self .left [name ].astype (object )})
922
+ ** {name : self .left [name ].astype (typ )})
928
923
if name in self .right .columns :
924
+ typ = rk .categories .dtype if is_categorical_dtype (rk ) else object
929
925
self .right = self .right .assign (
930
- ** {name : self .right [name ].astype (object )})
926
+ ** {name : self .right [name ].astype (typ )})
931
927
932
928
def _validate_specification (self ):
933
929
# Hm, any way to make this logic less complicated??
Original file line number Diff line number Diff line change @@ -1515,7 +1515,7 @@ def test_self_join_multiple_categories(self):
1515
1515
1516
1516
assert_frame_equal (result , df )
1517
1517
1518
- def test_dtype_on_categorical_dates (self ):
1518
+ def test_categorical_dates (self ):
1519
1519
# GH 16900
1520
1520
# dates should not be coerced to ints
1521
1521
@@ -1534,10 +1534,13 @@ def test_dtype_on_categorical_dates(self):
1534
1534
df2 ['date' ] = df2 ['date' ].astype ('category' )
1535
1535
1536
1536
result = pd .merge (df , df2 , how = 'outer' , on = ['date' ])
1537
- assert result ['date' ].dtype == 'category'
1537
+ assert result .shape == (3 , 3 )
1538
+ assert result ['date' ].iloc [0 ] == pd .Timestamp ('2001-01-01' )
1539
+ assert result ['date' ].iloc [- 1 ] == pd .Timestamp ('2001-01-03' )
1538
1540
1539
1541
result_inner = pd .merge (df , df2 , how = 'inner' , on = ['date' ])
1540
- assert result_inner ['date' ].dtype == 'category'
1542
+ assert result_inner .shape == (1 , 3 )
1543
+ assert result_inner ['date' ].iloc [- 1 ] == pd .Timestamp ('2001-01-01' )
1541
1544
1542
1545
1543
1546
@pytest .fixture
You can’t perform that action at this time.
0 commit comments