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,26 @@ 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
- assert isinstance (tup3 , tuple )
266
+ if PY37 :
267
+ assert hasattr (tup3 , "_fields" )
268
+ else :
269
+ assert not hasattr (tup3 , "_fields" )
270
+
271
+ # GH 28282
272
+ df_254_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (254 )}])
273
+ result_254_columns = next (df_254_columns .itertuples (index = False ))
274
+ assert isinstance (result_254_columns , tuple )
275
+ assert hasattr (result_254_columns , "_fields" )
276
+
277
+ df_255_columns = DataFrame ([{f"foo_{ i } " : f"bar_{ i } " for i in range (255 )}])
278
+ result_255_columns = next (df_255_columns .itertuples (index = False ))
279
+ assert isinstance (result_255_columns , tuple )
280
+
281
+ # Dataframes with >=255 columns will fallback to regular tuples on python < 3.7
282
+ if PY37 :
283
+ assert hasattr (result_255_columns , "_fields" )
284
+ else :
285
+ assert not hasattr (result_255_columns , "_fields" )
266
286
267
287
def test_sequence_like_with_categorical (self ):
268
288
@@ -288,22 +308,6 @@ def test_sequence_like_with_categorical(self):
288
308
for c , col in df .items ():
289
309
str (s )
290
310
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
311
def test_len (self , float_frame ):
308
312
assert len (float_frame ) == len (float_frame .index )
309
313
0 commit comments