5
5
import numpy as np
6
6
import pytest
7
7
8
+ from pandas .compat import PY37
9
+
8
10
import pandas as pd
9
11
from pandas import Categorical , DataFrame , Series , compat , date_range , timedelta_range
10
12
import pandas .util .testing as tm
@@ -261,8 +263,27 @@ def test_itertuples(self, float_frame):
261
263
df3 = DataFrame ({"f" + str (i ): [i ] for i in range (1024 )})
262
264
# will raise SyntaxError if trying to create namedtuple
263
265
tup3 = next (df3 .itertuples ())
264
- assert not hasattr (tup3 , "_fields" )
265
266
assert isinstance (tup3 , tuple )
267
+ if PY37 :
268
+ assert hasattr (tup3 , "_fields" )
269
+ else :
270
+ assert not hasattr (tup3 , "_fields" )
271
+
272
+ # GH 28282
273
+ df_254_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (254 )}])
274
+ result_254_columns = next (df_254_columns .itertuples (index = False ))
275
+ assert isinstance (result_254_columns , tuple )
276
+ assert hasattr (result_254_columns , "_fields" )
277
+
278
+ df_255_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (255 )}])
279
+ result_255_columns = next (df_255_columns .itertuples (index = False ))
280
+ assert isinstance (result_255_columns , tuple )
281
+
282
+ # Dataframes with >=255 columns will fallback to regular tuples on python < 3.7
283
+ if PY37 :
284
+ assert hasattr (result_255_columns , "_fields" )
285
+ else :
286
+ assert not hasattr (result_255_columns , "_fields" )
266
287
267
288
def test_sequence_like_with_categorical (self ):
268
289
@@ -288,22 +309,6 @@ def test_sequence_like_with_categorical(self):
288
309
for c , col in df .items ():
289
310
str (s )
290
311
291
- def test_itertuples_fallback_to_regular_tuples (self ):
292
- # GH 28282
293
-
294
- df_254_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (254 )}])
295
- result_254_columns = next (df_254_columns .itertuples (index = False ))
296
- assert isinstance (result_254_columns , tuple )
297
- assert result_254_columns .foo_1 == "bar_1"
298
-
299
- df_255_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (255 )}])
300
- result_255_columns = next (df_255_columns .itertuples (index = False ))
301
- assert isinstance (result_255_columns , tuple )
302
-
303
- # Dataframes with >=255 columns will fallback to regular tuples
304
- with pytest .raises (AttributeError ):
305
- result_255_columns .foo_1
306
-
307
312
def test_len (self , float_frame ):
308
313
assert len (float_frame ) == len (float_frame .index )
309
314
0 commit comments