Pandas-将值设置为空数据帧

时间:2018-01-16 04:01:21

标签: python pandas

我已经初始化了一个空的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])。当我想要处理多行时,我认为这应该是逻辑扩展。但显然,我错了。这是正确的方法吗?我需要为多行和多列输入一次值。我可以使用循环来完成它,但这不是我想要的。

任何帮助都会很棒。感谢

4 个答案:

答案 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