指定给chained.loc视图(不是副本)和设置为copywarning

2024-06-16 16:07:29 发布

您现在位置:Python中文网/ 问答频道 /正文

关于.loc和设置copywarning似乎有很多混淆。就我而言,我无法从现有的问题中找到解决这种情况的办法。你知道吗

目前,我有一个DF,我想过滤切片,然后设置值,这些切片传播到原来的。所以我不想要副本,我想要我修改的视图。你知道吗

目前它的工作原理是:

A0.loc[(A0['Pääkategoria'].isnull()) & (A0.Määrä < 0) & (A0.SaajaMaksaja.str.contains('|'.join(catfilter))), 'Pääkategoria'] = cat1

当有很多过滤器需要填满时,这将变得相当复杂。是否可以“增量”获取我处理的视图,然后将视图的设置值传播到原始的DFA0?你知道吗


现在我有以下原因: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)


Tags: 视图a1情况切片a0locjoincontains
2条回答

在我看来,一个更具可读性的解决方案,不应该导致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。但是这种链式运算在计算布尔级数的交集时是不必要的。你知道吗

在导入熊猫(作为pd)后尝试此项

pd.options.mode.chained_assignment = None

试试看

相关问题 更多 >