@@ -1127,26 +1127,44 @@ def test_where(self):
1127
1127
self .assertRaises (ValueError , s .__setitem__ , tuple ([[[True , False ]]]), [0 ,2 ,3 ])
1128
1128
self .assertRaises (ValueError , s .__setitem__ , tuple ([[[True , False ]]]), [])
1129
1129
1130
-
1131
- s = Series (np .arange (10 ), dtype = np .int32 )
1132
- mask = s < 5
1133
- s [mask ] = range (5 )
1134
- expected = Series (np .arange (10 ), dtype = np .int32 )
1135
- assert_series_equal (s , expected )
1136
- self .assertEquals (s .dtype , expected .dtype )
1130
+ # unsafe dtype changes
1131
+ for dtype in [ np .int8 , np .int16 , np .int32 , np .int64 , np .float16 , np .float32 , np .float64 ]:
1132
+ s = Series (np .arange (10 ), dtype = dtype )
1133
+ mask = s < 5
1134
+ s [mask ] = range (2 ,7 )
1135
+ expected = Series (range (2 ,7 ) + range (5 ,10 ), dtype = dtype )
1136
+ assert_series_equal (s , expected )
1137
+ self .assertEquals (s .dtype , expected .dtype )
1138
+
1139
+ # these are allowed operations, but are upcasted
1140
+ for dtype in [ np .int64 , np .float64 ]:
1141
+ s = Series (np .arange (10 ), dtype = dtype )
1142
+ mask = s < 5
1143
+ values = [2.5 ,3.5 ,4.5 ,5.5 ,6.5 ]
1144
+ s [mask ] = values
1145
+ expected = Series (values + range (5 ,10 ), dtype = 'float64' )
1146
+ assert_series_equal (s , expected )
1147
+ self .assertEquals (s .dtype , expected .dtype )
1148
+
1149
+ # can't do these as we are forced to change the itemsize of the input to something we cannot
1150
+ for dtype in [ np .int8 , np .int16 , np .int32 , np .float16 , np .float32 ]:
1151
+ s = Series (np .arange (10 ), dtype = dtype )
1152
+ mask = s < 5
1153
+ values = [2.5 ,3.5 ,4.5 ,5.5 ,6.5 ]
1154
+ self .assertRaises (Exception , s .__setitem__ , tuple (mask ), values )
1137
1155
1138
1156
# GH3235
1139
1157
s = Series (np .arange (10 ))
1140
1158
mask = s < 5
1141
- s [mask ] = range (5 )
1142
- expected = Series (np . arange ( 10 ))
1159
+ s [mask ] = range (2 , 7 )
1160
+ expected = Series (range ( 2 , 7 ) + range ( 5 , 10 ))
1143
1161
assert_series_equal (s , expected )
1144
1162
self .assertEquals (s .dtype , expected .dtype )
1145
1163
1146
1164
s = Series (np .arange (10 ))
1147
1165
mask = s > 5
1148
1166
s [mask ] = [0 ]* 4
1149
- expected = Series ([0 ,1 ,2 ,3 ,4 ,5 ] + [0 ]* 4 , dtype = 'float64' )
1167
+ expected = Series ([0 ,1 ,2 ,3 ,4 ,5 ] + [0 ]* 4 )
1150
1168
assert_series_equal (s ,expected )
1151
1169
1152
1170
s = Series (np .arange (10 ))
@@ -3174,7 +3192,7 @@ def test_cast_on_putmask(self):
3174
3192
# need to upcast
3175
3193
s = Series ([1 ,2 ],index = [1 ,2 ],dtype = 'int64' )
3176
3194
s [[True , False ]] = Series ([0 ],index = [1 ],dtype = 'int64' )
3177
- expected = Series ([0 ,2 ],index = [1 ,2 ],dtype = 'float64 ' )
3195
+ expected = Series ([0 ,2 ],index = [1 ,2 ],dtype = 'int64 ' )
3178
3196
3179
3197
assert_series_equal (s , expected )
3180
3198
0 commit comments