python - 处理附加到数据帧的抽象
问题描述
如果我对数据框有“引用”,则似乎无法在 pandas 中附加它,因为 append 和 concat 都不支持该inplace=True
参数。
一个(过于)简单的例子:
chosen_df, chosen_row = (candidate_a_df, candidate_a_row) if some_test else (candidate_b_df, candidate_b_row)
chosen_df = chosen_df.append(chosen_row)
现在因为 Python 做了类似于按值复制引用的操作,所以chosen_df
最初将是对通过的任何候选数据帧的引用some_test
。
但是 pandas 的更新语义意味着引用的数据帧不会被 append 函数的结果更新;而是创建一个新标签。我相信,如果有可能使用inplace=True
它会起作用,但看起来不太可能发生,在这里讨论https://github.com/pandas-dev/pandas/issues/14796
值得注意的是,使用列表而不是数据框的更简单示例确实有效,因为列表的内容直接由append()
.
所以我的问题是——如何在 Python 中实现对 N 个数据帧的可更新抽象?
这个成语在允许引用的语言中是司空见惯的、有用的和微不足道的,所以我猜我错过了一个 Pythonic 技巧,或者在考虑戴错帽子的整个问题!
显然,纯粹的说明性示例可以通过在 a 的主体中复制附加内容if...else
并依次具体引用每个底层数据帧来解决。但这不能扩展到更复杂的示例,并且它是类似于我正在寻找的参考的通用解决方案。
有任何想法吗?
解决方案
有一种专门针对熊猫数据框的简单方法 - 所以我会回答我自己的问题。
chosen_df, chosen_row = (candidate_a_df, candidate_a_row) if some_test else (candidate_b_df, candidate_b_row)
chosen_df.loc[max_idx+1] = chosen_row
的计算max_idx
很大程度上取决于 的结构chosen_df
。在最简单的情况下,当它是一个顺序索引从 0 开始的数据帧时,您可以简单地使用索引的长度来计算它。
如果chosen_df
是非顺序的,则需要调用max()
索引列而不是依赖索引的长度。
如果chosen_df
是 slice 或 groupby 对象,那么您需要计算最大父数据帧的索引,以确保它确实是所有行的最大值。
推荐阅读
- python - Python删除方括号和它们之间的无关信息
- kubernetes - Kubernetes 入口 HAProxy 未检测到更改
- matlab - 单元格的第一行作为表头 - Matlab
- c# - 在调试期间查看对象时是否隐式调用 get 属性?
- php - 需要更改 [product_categories] Woocommerce 短代码缩略图大小
- sql-server - 跨同一服务器上同一表上的多个数据库的动态 SQL 查询
- c++ - 初始化算法 c++11
- android - 使用 view pager2 和嵌套导航正确使用导航组件
- highcharts - Highchart - 使用瀑布式渲染显示直方图结果
- javascript - 动态生成的数据列表不会出现下拉菜单