我在熊猫dataframe
dfr
中有一列,其中有一个空列表。当我尝试附加它时,整个列都会更改。
下面是附带的代码。
N = 10
Nr = list(range(10))
dfr = pd.DataFrame(Nr,columns = ['ID'])
dfr['Assignment'] = [[]] * dfr.shape[0]
for i in range(N):
dfr.loc[i][1].append(i)
dfr
现在,当我运行此命令时,整个分配列都会更改。有人能帮我一下吗。我只需要在每一行的列表中有1个值i
。
答案 0 :(得分:0)
更容易和更快地创建具有所需值的序列。如果我正确理解,则与您的预期输出相符:
assignment = []
for i in range(N):
assignment.append([i])
dfr['Assignment'] = assignment
print(dfr)
输出:
ID Assignment
0 0 [0]
1 1 [1]
2 2 [2]
3 3 [3]
4 4 [4]
5 5 [5]
6 6 [6]
7 7 [7]
8 8 [8]
9 9 [9]
答案 1 :(得分:0)
正如@AMC所提到的,发生这种情况的原因是数据帧单元中的列表相同。结果,每次在将数字附加到同一列表时都要遍历数据帧单元时。因此,建议您为每个单元格创建一个列表,如下所示:
for i in range(N):
dfr.at[i,'Assignment'] = [i]
ID Assignment
0 0 [0]
1 1 [1]
2 2 [2]
3 3 [3]
4 4 [4]
5 5 [5]
6 6 [6]
7 7 [7]
8 8 [8]
9 9 [9]
然后,您可以独立更新这些单元格:
for i in range(N):
dfr.at[i,'Assignment'].append(i+1)
ID Assignment
0 0 [0, 1]
1 1 [1, 2]
2 2 [2, 3]
3 3 [3, 4]
4 4 [4, 5]
5 5 [5, 6]
6 6 [6, 7]
7 7 [7, 8]
8 8 [8, 9]
9 9 [9, 10]