如果尝试通过运行以下命令将undefined
<failed
中的值从usd_pledged_real
替换为usd_goal_real
,我会尝试:
data.loc[(data['state'] == 'undefined') & (data['usd_pledged_real'] < data['usd_goal_real'])]['state'].replace('undefined', 'failed', inplace=True)
但是,我遇到了这个错误:
/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py:6786: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
self._update_inplace(new_data)
我的数据集:
答案 0 :(得分:0)
我认为这里replace
是不必要的,因为通过测试undefined
根据条件设置值:
m = (data['state'] == 'undefined') & (data['usd_pledged_real'] < data['usd_goal_real'])
data.loc[m,'state'] = 'failed'
如果要使用replace
,则必须将输出分配回去。
您不能使用inplace=True
,因为子集返回一个Series
,其数据可能作为视图。在原位修改它不会始终将其传播回父对象。这就是为什么SettingWithCopyWarning
在那里存在的原因(如果设置了该选项,则会加薪)。您不应该这样做,也不应该是他们这样做的理由。
m = (data['state'] == 'undefined') & (data['usd_pledged_real'] < data['usd_goal_real'])
data.loc[m,'state'] = data.loc[m,'state'].replace('undefined', 'failed')
通常不建议使用inplace
-link:
pandas核心团队不鼓励使用 inplace 参数,最终将不推荐使用该参数(这意味着“计划从库中删除”)。原因如下:
就地在方法链中不起作用。
与名称所暗示的相反,使用 inplace 通常不会阻止创建副本。
删除 inplace 选项将降低熊猫代码库的复杂性。