python - 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 循环中吗?谢谢!
解决方案
append
不是inplace
操作。
参考列表的索引并修改位置
for i in range(len(mylist)):
mylist[i] = mylist[i].append(df, ignore_index=True)
推荐阅读
- c++ - 我在 C++ 中的输出有问题,最后两次打印不起作用
- python - 错误:json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
- if-statement - 是否有检查范围内相同值的功能?
- elasticsearch - 如何在不使用 Filebeat 或 Logstash 等任何日志传送器的情况下将日志存储在 Elasticsearch 中?
- vba - VBA - 未找到命名参数
- spring-boot - 如何设置 x 轴的最小值最大值取决于 Chartjs 和 Spring Boot 的数据?
- php - 如何让 mysql 从迁移页面接受特定格式的日期?
- python - 有没有办法创建一个充满函数的numpy数组来代替元素?
- javascript - 从消息中提取 OTP 并在本机反应中仅显示 OTP 值
- r - 使用“[]”而不是使用 $-operator 子集数据表时出错