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