Python 列表vs";“列表列表”;作为pd.DataFrame()中的输入

Python 列表vs";“列表列表”;作为pd.DataFrame()中的输入,python,pandas,dataframe,Python,Pandas,Dataframe,我试图弄清楚为什么命令df=pd.DataFrame([1,2,3])在列中以1,2,3的形式给出输出,而当我提供df=pd.DataFrame([[1,2,3]])时,它以1,2,3的形式给出一行输出 如果pd.DataFrame([1,2,3])将列表[1,2,3]视为一个系列并将其放在一列下,那么为什么pd.DataFrame([[1,2,3],[4,5,6]])不将两个列表作为两个系列并创建一个包含两列的数据框架 相反,它将两个列表作为行 供参考的屏幕截图: 这很容易理解 第一种情况-[

我试图弄清楚为什么命令
df=pd.DataFrame([1,2,3])
在列中以1,2,3的形式给出输出,而当我提供
df=pd.DataFrame([[1,2,3]])
时,它以1,2,3的形式给出一行输出

如果
pd.DataFrame([1,2,3])
将列表
[1,2,3]
视为一个系列并将其放在一列下,那么为什么
pd.DataFrame([[1,2,3],[4,5,6]])
不将两个列表作为两个系列并创建一个包含两列的数据框架

相反,它将两个列表作为行

供参考的屏幕截图:


这很容易理解

第一种情况-
[1,2,3]
有3个对象(每个对象作为一个int)。熊猫因此创建3行来容纳它。由于每个对象都是单个int,因此只添加了1列/特征

第二种情况是列表列表。它包含2个对象,每个对象是一个3元素列表。因此,熊猫会创建两行来容纳这两个对象。由于每个对象都是一个3元素列表,因此它会创建3列/要素来存储它们

第三种情况是包含单个对象的列表。此对象是一个3长度的对象。因此,与以前一样,pandas将创建一行但有3列来存储它

第四个案例-(如@Scott在其回答中所述)
[[1,2,3]],[[4,5,6]]
是一个列表列表。它包含2个对象,每个对象都是列表的列表。因此将有两行。但是,由于此
[[1,2,3]]中的每个对象都包含一个项目,并且只有[1,2,3]
,因此将只有一列,并且每个条目将包含一个列表

更简单的理解方法是使用
numpy.shape

a = [1,2,3]
b = [[1,2,3], [4,5,6]]
c = [[1,2,3]]
d = [[[1,2,3]],[[4,5,6]]]

print(np.array(a).shape, pd.DataFrame(a).shape)
print(np.array(b).shape, pd.DataFrame(b).shape)
print(np.array(c).shape, pd.DataFrame(c).shape)
print(np.array(d).shape, pd.DataFrame(d).shape)

这里,numpy数组形状将与数据帧中预期的(行、列)匹配。在最后一种情况下,只有前两个轴分别被视为行和列。剥离这些轴后的剩余对象直接存储在数据框中。

Aah。。明白了,非常感谢,阿凯……完美的解释。
(3,) (3, 1)       #3 rows, 1 column
(2, 3) (2, 3)     #2 rows, 3 columns
(1, 3) (1, 3)     #1 row, 3 columns
(2, 1, 3) (2, 1)  #2 rows, 1 column (and each cell will hold a 3 length list)!