迭代不同长度的数组并替换值
iterating different length arrays and replace values
我有一个如下所示的数据框:
df = pd.DataFrame({'col1': [[[1,5,3],[0,0,0]], [[1,2,3],[0,0,0], [1,2,3]]]})
# which looks like this:
col1
0 [[1, 5, 3], [0, 0, 0]]
1 [[1, 2, 3], [0, 0, 0], [1, 2, 3]]
我还有一个数组(a):
a = np.array([[1], [2], [3], [4], [5]])
我想用a中的值替换df中每隔一个位置的值。
因此,例如,我想制作如下所示的数据框(每个数组的每个第二个值都发生变化):
col1
0 [[1, 1, 3], [0, 2, 0]]
1 [[1, 3, 3], [0, 4, 0], [1, 5, 3]]
我是这样处理的:
for i in range(len(df)):
temp = df.loc[i, "col1"]
for k in range(len(a)):
for j in range(len(temp)):
temp[j][1] = a[k][0]
print(temp)
这导致:
[[1, 5, 3], [0, 5, 0]]
[[1, 5, 3], [0, 5, 0], [1, 5, 3]]
谁能帮我解决这个问题??
提前致谢!
您不应该使用嵌套循环遍历 a
,因为这会产生叉积。只需增加一个索引变量并使用它来获取数组的下一个元素。
k = 0
for i in range(len(df)):
temp = df.loc[i, "col1"]
for j in range(len(temp)):
temp[j][1] = a[k][0]
k += 1
print(temp)
一种简单的方法是将数组转换为迭代器:
i = iter(a.ravel())
for L in df['col1']:
for l in L:
l[1] = next(i, l[1])
注意。此处使用原始值作为默认值,以防数组短于子列表的数量
输出:
col1
0 [[1, 1, 3], [0, 2, 0]]
1 [[1, 3, 3], [0, 4, 0], [1, 5, 3]]
我有一个如下所示的数据框:
df = pd.DataFrame({'col1': [[[1,5,3],[0,0,0]], [[1,2,3],[0,0,0], [1,2,3]]]})
# which looks like this:
col1
0 [[1, 5, 3], [0, 0, 0]]
1 [[1, 2, 3], [0, 0, 0], [1, 2, 3]]
我还有一个数组(a):
a = np.array([[1], [2], [3], [4], [5]])
我想用a中的值替换df中每隔一个位置的值。 因此,例如,我想制作如下所示的数据框(每个数组的每个第二个值都发生变化):
col1
0 [[1, 1, 3], [0, 2, 0]]
1 [[1, 3, 3], [0, 4, 0], [1, 5, 3]]
我是这样处理的:
for i in range(len(df)):
temp = df.loc[i, "col1"]
for k in range(len(a)):
for j in range(len(temp)):
temp[j][1] = a[k][0]
print(temp)
这导致:
[[1, 5, 3], [0, 5, 0]]
[[1, 5, 3], [0, 5, 0], [1, 5, 3]]
谁能帮我解决这个问题?? 提前致谢!
您不应该使用嵌套循环遍历 a
,因为这会产生叉积。只需增加一个索引变量并使用它来获取数组的下一个元素。
k = 0
for i in range(len(df)):
temp = df.loc[i, "col1"]
for j in range(len(temp)):
temp[j][1] = a[k][0]
k += 1
print(temp)
一种简单的方法是将数组转换为迭代器:
i = iter(a.ravel())
for L in df['col1']:
for l in L:
l[1] = next(i, l[1])
注意。此处使用原始值作为默认值,以防数组短于子列表的数量
输出:
col1
0 [[1, 1, 3], [0, 2, 0]]
1 [[1, 3, 3], [0, 4, 0], [1, 5, 3]]