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]])) 你能解释一下原因吗?这可以让你大致了解一下。对数据参数有多个检查。如果数据参数是一个项目列表,那么下面的代码将在后台执行。选中列表的第一个元素。若

当我尝试创建带有后跟数组的列表的pandas数据帧时,我得到一个错误:

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没有理解你的意思。语言是由人类设计的,人类会完全按照自己的要求去做。你可以在语言规则的范围内做任何事情。