我有一个大型数据帧,我从ODBC数据库中取出 . Dataframe有多个列;我试图通过过滤另外两个来更改一列的值 . 首先,我使用两个条件过滤我的dataframe data_prem,这些条件为我提供了正确的行:
data_prem[(data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))]
然后我在选择上使用replace函数将'M'值更改为'H'值:
data_prem[(data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))]['Reinsurer'].replace(to_replace='M',value='H',inplace=True,regex=True)
Python警告我,我正在尝试修改数据框的副本,即使我明确地引用了原始数据框(我发布了图像,因此您可以看到我的结果) .
我也尝试过以下方式使用.loc函数:
data_prem.loc[((data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))),'Reinsurer'] = 'H'
它更改了符合第二个条件的所有行(str.contains ...),但它没有应用第一个条件 . 我还在“再保险人”专栏中获取了其他“PRODUCT_NAME”值的替代品 .
我已经在网上搜索了一段时间的答案 . 我在熊猫图书馆看到了一些提到的错误,不确定这是不是他们在说什么 .
我会重视你可能有的任何意见,在解决这个问题的其他方法上也会很有意思 . 我在“再保险人”列中添加了 Map 功能,其中“PRODUCT_NAME”作为输入(有一个字典,将所有'PRODUCT_NAME'值与'再保险'值相关联) .
1 回答
给定您的布尔
mask
,您已经演示了两种应用chained indexing的方法 . 这是警告的原因以及您没有看到按预期应用逻辑的原因 .链式索引:示例#1
链式索引:示例#2
避免链式索引
您可以通过应用
mask
并使用单个loc
调用来保持简单: