54
54
_ensure_int64 ,
55
55
_ensure_platform_int ,
56
56
is_list_like ,
57
+ is_nested_list_like ,
57
58
is_iterator ,
58
59
is_sequence ,
59
60
is_named_tuple )
@@ -1256,11 +1257,6 @@ def from_items(cls, items, columns=None, orient='columns'):
1256
1257
"""
1257
1258
keys , values = lzip (* items )
1258
1259
1259
- for val in values :
1260
- if not is_list_like (val ):
1261
- raise TypeError ('The value in each (key, value) pair must '
1262
- 'be an array or a Series' )
1263
-
1264
1260
if orient == 'columns' :
1265
1261
if columns is not None :
1266
1262
columns = _ensure_index (columns )
@@ -1277,16 +1273,31 @@ def from_items(cls, items, columns=None, orient='columns'):
1277
1273
columns = _ensure_index (keys )
1278
1274
arrays = values
1279
1275
1280
- return cls ._from_arrays (arrays , columns , None )
1276
+ try :
1277
+ return cls ._from_arrays (arrays , columns , None )
1278
+
1279
+ except ValueError :
1280
+ if not is_nested_list_like (values ):
1281
+ raise TypeError ('The value in each (key, value) pair must '
1282
+ 'be an array or a Series' )
1283
+
1281
1284
elif orient == 'index' :
1282
1285
if columns is None :
1283
1286
raise TypeError ("Must pass columns with orient='index'" )
1284
1287
1285
- keys = _ensure_index (keys )
1288
+ try :
1289
+ keys = _ensure_index (keys )
1290
+
1291
+ arr = np .array (values , dtype = object ).T
1292
+ data = [lib .maybe_convert_objects (v ) for v in arr ]
1293
+
1294
+ return cls ._from_arrays (data , columns , keys )
1295
+
1296
+ except TypeError :
1297
+ if not is_nested_list_like (values ):
1298
+ raise TypeError ('The value in each (key, value) pair must '
1299
+ 'be an array or a Series' )
1286
1300
1287
- arr = np .array (values , dtype = object ).T
1288
- data = [lib .maybe_convert_objects (v ) for v in arr ]
1289
- return cls ._from_arrays (data , columns , keys )
1290
1301
else : # pragma: no cover
1291
1302
raise ValueError ("'orient' must be either 'columns' or 'index'" )
1292
1303
0 commit comments