熊猫-将行作为元素添加到DataFrames中,但不起作用

时间:2018-10-09 13:40:42

标签: python pandas append

我有一个数据帧列表,看起来像这样:

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

和我要附加到mylist中两个数据框底部的单独的datframe(df)。

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[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循环中发生吗?谢谢!

2 个答案:

答案 0 :(得分:2)

append不是inplace操作。

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

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

答案 1 :(得分:0)

append之外:如果要使用pd.concat,则输入必须是pandas个对象的序列

for i in range(len(mylist)):
    mylist[i] = pd.concat([mylist[i], df])     # Passing the two dataframes as list, note the []