我正在尝试创建一个包含多个索引和一列的DataFrame。如果我键入以下内容:
InitialPosition=pd.DataFrame( [1000000,1,1] ,index=['Cash'],columns=['a','b','c'] )
我收到错误:
ValueError: Shape of passed values is (1, 3), indices imply (3, 1)
如果我将数组更改为列,例如:
InitialPosition=pd.DataFrame( [[1000000],[1],[1]] ,index=['Cash'],columns=['a','b','c'] )
然后我遇到的错误是:
AssertionError: 3 columns passed, passed data had 1 columns
你知道为什么会这样吗?
一种解决方案是:
InitialPosition=pd.DataFrame( [1000000,1,1] ,columns=['Cash'],index=['a','b','c'] ).T
但看起来并不优雅。
答案 0 :(得分:1)
问题是,您将index
指定为'Cash'
,这只是一个索引。
并且[1000000,1,1]
正在传递3行数据。
看看这个:
InitialPosition=pd.DataFrame( [1000000,1,1] ,columns=['Cash'],index=['a','b','c'] ).T
您传递的是3行数据,1 x列和3个索引,它们与数据帧的结构相匹配。
然而,考虑像x
,y
坐标中的数据框架中的数组,如columns
,rows
结构,这应该是您的DataFrame的样子:
InitialPosition=pd.DataFrame( [[1000000, 1, 1]] ,columns=['a', 'b', 'c'],index=['cash'] )
[[10000000, 1, 1]]
与rows[0]
,columns[0], columns[1], columns[2] = ...
相似,标题为'a'
,'b'
,'c'
和1 x index {{ 1}}。
可替换地,
'cash'
,InitialPosition=pd.DataFrame( [[1000000],[1],[1]] ,columns=['Cash'],index=['a','b','c'] ).T
转换为[[1000000], [1], [1]]
,rows[0], columns[0] = [1000000]
,rows[1], columns[0] = 1
,1 x列rows[2], columns[0] = 1
和3 x索引'Cash'
,相应地'a'
,'b'
,然后将其转置到最后。
两者都会给你这个结果:
'c'
我强烈建议你阅读这篇10 Minutes to pandas,它解释了相当彻底但又不太难消化的事情。