围绕.loc和SettingWithCopyWarning似乎存在很多混淆。就我而言,我无法从现有问题中找到解决这种情况的方法。
目前我有一个DF,我想用切片过滤,然后将值设置为传播到原始切片的这些切片。所以我不想要副本,我想要修改的视图。
目前它适用于此:
A0.loc[(A0['Pääkategoria'].isnull()) & (A0.Määrä < 0) & (A0.SaajaMaksaja.str.contains('|'.join(catfilter))), 'Pääkategoria'] = cat1
当有大量过滤器需要填满时,这将变得非常复杂。是否有可能逐步获得意见&#34;我工作,然后视图的设置值传播到原始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)进行切片
答案 0 :(得分:1)
在我看来,一个更易读的解决方案不应该导致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
。但是这个链接不是计算布尔系列的交集所必需的。
答案 1 :(得分:0)
导入pandas后尝试这个(作为pd)
java.lang.NumberFormatException: For input string: "16606634614844517897"
试试