python - Pandas 分配给链式 .loc 视图(不是副本)和 SettingWithCopyWarning
问题描述
.loc 和 SettingWithCopyWarning 似乎存在很多混淆。就我而言,我无法从现有问题中找到解决这种情况的方法。
目前我有一个 DF,我想用切片进行过滤,然后为这些切片设置值,这些切片会传播到原始切片。所以我不想要副本,我想要我修改的视图。
目前它适用于此:
A0.loc[(A0['Pääkategoria'].isnull()) & (A0.Määrä < 0) & (A0.SaajaMaksaja.str.contains('|'.join(catfilter))), 'Pääkategoria'] = cat1
当有很多过滤器要填充时,这将变得相当复杂。是否可以“增量”地获取我处理的视图,然后将视图的设置值传播到原始 DF A0
?
现在我有以下原因:SettingWithCopyWarning
A1 = A0.loc[(A0['Pääkategoria'].isnull() & (A0.Määrä < 0))]
A1.loc[A1.SaajaMaksaja.str.contains('|'.join(catfilter)), 'Pääkategoria'] = cat1
所以看起来这A1
只是一个副本,而不是一个切片。多次切片可以让我针对不同的情况进行切片(例如 > 0)
解决方案
在我看来,不应该导致的更具可读性的解决方案SettingWithCopyWarning
是将您的部分掩码计算为单独的步骤。
然后&
在 内使用一次运算符pd.DataFrame.loc
:
mask = A0['Pääkategoria'].isnull() & (A0.Määrä < 0)
A0.loc[mask & A1.SaajaMaksaja.str.contains('|'.join(catfilter)), 'Pääkategoria'] = cat1
正如您所注意到的,链接loc
索引器可能会提高SettingWithCopyWarning
. 但是这种链接对于计算布尔级数的交集不是必需的。
推荐阅读
- django - django-allauth AUTHENTICATED_LOGIN_REDIRECTS 不起作用
- python - 在两条切线python之间拟合多项式
- flutter - 颤振:我应该在页面中测试什么?
- python - 如何获取特定行号的日期时间索引值
- c++ - 在 linux 上,使用 C/C++ 编程时,我应该使用什么函数来输入密码?
- c# - 显示一些重复返回的 ASP 中继器
- python - 无法在 MacOS BigSur 中删除 Python 的符号链接
- mongodb - 运行 npm start 时在控制台中从 Mongodb Atlas 获取数据,但无法获取 URL
- datetime - 散点图的不同颜色渐变取决于时间(Matplotlib)
- css - 选中的 CSS 复选框问题在导航中不起作用