首页 > 解决方案 > Pandas - 将行作为列表中的元素附加到 DataFrame,不起作用

问题描述

我有一个如下所示的数据框列表:

mylist=[pd.DataFrame({'a':[5,5],'b':[5,5]}),pd.DataFrame({'a':[6,6],'b':[6,6]})]

和一个单独的数据帧(df),我想附加到 mylist 中两个数据帧的底部。

df=pd.DataFrame({'a':[9],'b':[9]})

当我通过循环 mylist 进行追加时,追加适用于列表的元素,但它不会更新或更改 mylist。

for i in mylist:
    i=i.append(df, ignore_index=True)
    print(i, '\n')
    print(mylist, '\n')

   a  b
0  5  5
1  5  5
2  9  9 

[   a  b
 0  5  5
 1  5  5,
    a  b
 0  6  6
 1  6  6] 

    a  b
 0  6  6
 1  6  6
 2  9  9 

[   a  b
 0  5  5
 1  5  5,
    a  b
 0  6  6
 1  6  6] 

我通过使用 concat 并通过在“a”上合并尝试了多种方法,我得到了相同的一般结果——数据框元素在循环内被修改,但在循环完成后没有任何改变。

当我尝试进行相同的更改但不使用循环时,mylist更新。

mylist[0]=mylist[0].append(df, ignore_index=True)
print(mylist[0])
print(mylist)

   a  b
0  5  5
1  5  5
2  9  9

[   a  b
 0  5  5
 1  5  5
 2  9  9,
    a  b
 0  6  6
 1  6  6]

有人可以解释为什么这种行为发生在 for 循环中吗?谢谢!

标签: pythonpandasappend

解决方案


append不是inplace操作。

参考列表的索引并修改位置

for i in range(len(mylist)):
    mylist[i] = mylist[i].append(df, ignore_index=True)

推荐阅读