【发布时间】:2021-01-29 04:55:14
【问题描述】:
我有一个由 5 个熊猫数组组成的列表,每个数组大小为 4 x 3。 我想将它们的第三行更改为一行 0、一个、两个,无论列表中数组的索引是什么。 我编写了代码,一个 for 循环,当我打印结果时,它看起来正在工作:
A=pd.DataFrame(np.random.randn(4,3))
AList=5*[A]
AList[0].iloc[2,:]
for kkk0 in range(0,len(AList)):
AList[kkk0].iloc[2,:]=kkk0*np.ones((1,3))
print(AList[kkk0])
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 0.000000 0.000000 0.000000
3 1.664176 -0.696303 0.239165
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 1.000000 1.000000 1.000000
3 1.664176 -0.696303 0.239165
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 2.000000 2.000000 2.000000
3 1.664176 -0.696303 0.239165
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 3.000000 3.000000 3.000000
3 1.664176 -0.696303 0.239165
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165
然而,荒谬的事情现在开始了: 当我在 for 循环结束后尝试查看 AList 的内容时,我发现 List 的所有组成 PAndas 数组的第三行都是 4 行!
AList
Out[3]:
[ 0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165,
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165,
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165,
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165,
0 1 2
0 -0.168639 0.300507 2.823529
1 0.608844 0.017578 -0.342164
2 4.000000 4.000000 4.000000
3 1.664176 -0.696303 0.239165]
有什么想法吗?
【问题讨论】: