PythonNumpy:在V1.10.1中使用列表更新多个列失败

PythonNumpy:在V1.10.1中使用列表更新多个列失败,python,pandas,Python,Pandas,在0.16.2中,以下代码可以正常工作: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}, index=[0, 1, 2, 3])

在0.16.2中,以下代码可以正常工作:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
             'B': ['B0', 'B1', 'B2', 'B3'],
             'C': ['C0', 'C1', 'C2', 'C3'],
             'D': ['D0', 'D1', 'D2', 'D3']},
             index=[0, 1, 2, 3])                     
df1[['A','B']] = [[1,1,1,1],[2,2,2,2]]
df1
Out[149]: 
   A  B   C   D
0  1  2  C0  D0
1  1  2  C1  D1
2  1  2  C2  D2
3  1  2  C3  D3
在0.17中,相同的代码返回以下错误:

ValueError: cannot copy sequence with size 2 to array axis with dimension 4
这是0.17版本的错误吗?有哪种解决方案可以同时适用于这两个版本

更新:
事实证明,这个问题是由努比而不是熊猫引起的。在numpy 1.09中,列表必须为[[1,1,1]、[2,2,2]],而在1.10.1中,列表必须为[[1,2]、[1,2]、[1,2]、[1,2]、[1,2]]才能执行此任务

根据@Swarm的评论

df1[['A','B']] = pd.np.array([[1,1,1,1],[2,2,2,2]]).T
通过将
df1
投射到
pd.np.array

>>> pd.np.array(df1[['A','B']])
array([['A0', 'B0'],
       ['A1', 'B1'],
       ['A2', 'B2'],
       ['A3', 'B3']], dtype=object)
注意形状是
(4,2)

方法(1)
方法(2)

作为一个单行程序,请尝试以下操作:df1[['a','B']=[[1,2],[1,2],[1,2],[1,2]]。这适用于0.17,但不适用于0.16。2@Allen,我在
Python2
上用0.16.2进行了尝试,效果不错。它可能是
numpy
的版本吗?我的是1.10.1谢谢,伙计们,原来问题是由numpy而不是熊猫引起的。在numpy 1.09中,列表必须是[[1,1,1,1],[2,2,2]],而在1.10.1中,列表必须是[[1,2],[1,2],[1,2],[1,2]]。。。对于Python3兼容性,您必须使用
list(zip(…)
,我没有用
Python3
尝试这一点,无论如何
list(zip(…)
将产生相同的结果
In [12]:
A_values = [1,1,1,1]
B_values = [2,2,2,2]
df.assign(A = A_values , B = B_values)
Out[12]:
    A   B   C   D
0   1   2   C0  D0
1   1   2   C1  D1
2   1   2   C2  D2
3   1   2   C3  D3
import itertools

In [10]:
A_values = [1,1,1,1]
B_values = [2,2,2,2]

In [28]:
df1[['A','B']] = zip(A_values , B_values)
df1
Out[28]:
    A   B   C   D
0   1   2   C0  D0
1   1   2   C1  D1
2   1   2   C2  D2
3   1   2   C3  D3