我有一個看起來像這樣的資料框:
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]]
誰能幫我解決這個問題?提前致謝!
uj5u.com熱心網友回復:
您不應該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)
uj5u.com熱心網友回復:
一種簡單的方法是將陣列轉換為迭代器:
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]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/478314.html
