我已经初始化了一个空的pandas数据帧,我现在正在尝试填充但我仍然遇到同样的错误。这是我正在使用的(简化)代码
import pandas as pd
cols = list("ABC")
df = pd.DataFrame(columns=cols)
# sett the values for the first two rows
df.loc[0:2,:] = [[1,2],[3,4],[5,6]]
运行上面的代码时出现以下错误:
ValueError: cannot copy sequence with size 3 to array axis with dimension 0
我不确定是什么造成的。我一次尝试使用一行,但它可以正常工作(df.loc[0,:] = [1,2,3]
)。当我想要处理多行时,我认为这应该是逻辑扩展。但显然,我错了。这是正确的方法吗?我需要为多行和多列输入一次值。我可以使用循环来完成它,但这不是我想要的。
任何帮助都会很棒。感谢
答案 0 :(得分:3)
由于您拥有空数据帧中的列,因此请在数据帧构造函数中使用它,即
import pandas as pd
cols = list("ABC")
df = pd.DataFrame(columns=cols)
df = pd.DataFrame(np.array([[1,2],[3,4],[5,6]]).T,columns=df.columns)
A B C
0 1 3 5
1 2 4 6
好吧,如果你想特别使用loc,那么先重新索引数据帧然后分配即
arr = np.array([[1,2],[3,4],[5,6]]).T
df = df.reindex(np.arange(arr.shape[0]))
df.loc[0:arr.shape[0],:] = arr
A B C
0 1 3 5
1 2 4 6
答案 1 :(得分:1)
如何按索引添加数据如下所示。您可以在接收数据时向外部添加功能。
def add_to_df(index, data):
for idx,i in zip(index,(zip(*data))):
df.loc[idx]=i
#Set values for first two rows
data1 = [[1,2],[3,4],[5,6]]
index1 = [0,1]
add_to_df(index1, data1)
print df
print ""
#Set values for next three rows
data2 = [[7,8,9],[10,11,12],[13,14,15]]
index2 = [2,3,4]
add_to_df(index2, data2)
print df
<强>结果强>
>>>
A B C
0 1.0 3.0 5.0
1 2.0 4.0 6.0
A B C
0 1.0 3.0 5.0
1 2.0 4.0 6.0
2 7.0 10.0 13.0
3 8.0 11.0 14.0
4 9.0 12.0 15.0
>>>
答案 2 :(得分:1)
通过文档和一些实验,我的猜测是loc
只允许您一次插入1个键。但是,您可以首先使用reindex
插入多个键,如@Dark所示。
.loc / []操作可以在为该轴设置不存在的键时执行放大。
http://pandas-docs.github.io/pandas-docs-travis/indexing.html#setting-with-enlargement
此外,在使用loc[:2, :]
时,您的意思是要选择前两行。但是,空df中没有任何内容供您选择。在尝试插入3行时没有行。因此,消息给出了
ValueError: cannot copy sequence with size 3 to array axis with dimension 0
BTW,[[1,2],[3,4],[5,6]]
将是3行而不是2行。
答案 3 :(得分:-1)
这是否可以获得您要查找的输出:
import pandas as pd
df=pd.DataFrame({'A':[1,2],'B':[3,4],'C':[5,6]})
输出:
A B C
0 1 3 5
1 2 4 6