有没有一种方法可以在熊猫数据框中添加列表?

时间:2020-02-20 19:36:54

标签: python pandas

我在熊猫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

enter image description here

2 个答案:

答案 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]