我有一个数据帧列表,看起来像这样:
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循环中发生吗?谢谢!
答案 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 []