@@ -271,14 +271,23 @@ def floordiv(self, left: IndexOpsLike, right: Any) -> SeriesOrIndex:
271
271
_sanitize_list_like (right )
272
272
if not is_valid_operand_for_numeric_arithmetic (right ):
273
273
raise TypeError ("Floor division can not be applied to given types." )
274
+ spark_session = left ._internal .spark_frame .sparkSession
274
275
275
276
def floordiv (left : PySparkColumn , right : Any ) -> PySparkColumn :
276
- return F .when (F .lit (right is np .nan ), np .nan ).otherwise (
277
- F .when (
278
- F .lit (right != 0 ) | F .lit (right ).isNull (),
279
- F .floor (left .__div__ (right )),
280
- ).otherwise (F .lit (np .inf ).__div__ (left ))
281
- )
277
+ if is_ansi_mode_enabled (spark_session ):
278
+ return F .when (F .lit (right is np .nan ), np .nan ).otherwise (
279
+ F .when (
280
+ F .lit (right != 0 ) | F .lit (right ).isNull (),
281
+ F .floor (left .__div__ (right )),
282
+ ).otherwise (F .try_divide (F .lit (np .inf ), left ))
283
+ )
284
+ else :
285
+ return F .when (F .lit (right is np .nan ), np .nan ).otherwise (
286
+ F .when (
287
+ F .lit (right != 0 ) | F .lit (right ).isNull (),
288
+ F .floor (left .__div__ (right )),
289
+ ).otherwise (F .lit (np .inf ).__div__ (left ))
290
+ )
282
291
283
292
right = transform_boolean_operand_to_numeric (right , spark_type = left .spark .data_type )
284
293
return numpy_column_op (floordiv )(left , right )
@@ -373,11 +382,14 @@ def floordiv(self, left: IndexOpsLike, right: Any) -> SeriesOrIndex:
373
382
374
383
def floordiv (left : PySparkColumn , right : Any ) -> PySparkColumn :
375
384
if is_ansi_mode_enabled (spark_session ):
376
- return F .when (F .lit (right is np .nan ), F .lit (np .nan )).otherwise (
377
- F .when (F .lit (right != 0 ), F .floor (left / F .lit (right ))).otherwise (
378
- F .when (
379
- F .lit (left == np .inf ) | F .lit (left == - np .inf ), F .lit (left )
380
- ).otherwise (F .lit (np .inf ).__div__ (left ))
385
+ return F .when (F .lit (right is np .nan ), np .nan ).otherwise (
386
+ F .when (
387
+ F .lit (right != 0 ) | F .lit (right ).isNull (),
388
+ F .floor (left .__div__ (right )),
389
+ ).otherwise (
390
+ F .when (F .lit (left == np .inf ) | F .lit (left == - np .inf ), left ).otherwise (
391
+ F .try_divide (F .lit (np .inf ), left )
392
+ )
381
393
)
382
394
)
383
395
else :
0 commit comments