Pandas 从后跟数组的列表创建数据帧会产生错误
当我尝试创建带有后跟数组的列表的pandas数据帧时,我得到一个错误:Pandas 从后跟数组的列表创建数据帧会产生错误,pandas,dataframe,Pandas,Dataframe,当我尝试创建带有后跟数组的列表的pandas数据帧时,我得到一个错误: print(DataFrame([[10,20,30],np.arange(3)])) TypeError:应为列表,获取numpy.ndarray 但如果我颠倒了数据的顺序,则操作成功: print(DataFrame([np.arange(3),[10,20,30]])) 你能解释一下原因吗?这可以让你大致了解一下。对数据参数有多个检查。如果数据参数是一个项目列表,那么下面的代码将在后台执行。选中列表的第一个元素。若
print(DataFrame([[10,20,30],np.arange(3)]))
TypeError:应为列表,获取numpy.ndarray
但如果我颠倒了数据的顺序,则操作成功:
print(DataFrame([np.arange(3),[10,20,30]]))
你能解释一下原因吗?这可以让你大致了解一下。对数据参数有多个检查。如果数据参数是一个项目列表,那么下面的代码将在后台执行。选中列表的第一个元素。若它是一个列表,那个么它将进入类似列表的块,但若它的ndarray,它将进入ndarray块。lists块无法处理ndarray,但ndarray块可以处理列表。这就是为什么你不会出错
elif isinstance(data, (list, types.GeneratorType)):
if isinstance(data, types.GeneratorType):
data = list(data)
if len(data) > 0:
-------> #IF FIRST ELEMENT IS LIST ENTER THIS BLOCK
if is_list_like(data[0]) and getattr(data[0], 'ndim', 1) == 1:
if is_named_tuple(data[0]) and columns is None:
columns = data[0]._fields
arrays, columns = _to_arrays(data, columns, dtype=dtype)
columns = _ensure_index(columns)
# set the index
if index is None:
if isinstance(data[0], Series):
index = _get_names_from_index(data)
elif isinstance(data[0], Categorical):
index = _default_index(len(data[0]))
else:
index = _default_index(len(data))
mgr = _arrays_to_mgr(arrays, columns, index, columns,
dtype=dtype)
------> #ELSE ENTER THIS BLOCK
else:
mgr = self._init_ndarray(data, index, columns, dtype=dtype,
copy=copy)
else:
mgr = self._init_dict({}, index, columns, dtype=dtype)
非常感谢您的澄清。:)不过,我还是很好奇,从逻辑上(理论上讲,计算机语言)是否可以允许第二种语法表示第一种语法。@Royalblue没有理解你的意思。语言是由人类设计的,人类会完全按照自己的要求去做。你可以在语言规则的范围内做任何事情。