Python SettingWithCopyWarning,但我尝试使用.ix设置值

时间:2018-04-17 16:29:13

标签: pandas dataframe

我在python中有一个pandas数据框,我试图修改特定行中的特定值。我找到了这个问题的解决方案Set value for particular cell in pandas DataFrame using index,但它仍然生成了SettingWithCopy错误。

数据框的名称是internal_df,它有列'价格','访问'和'订单'。具体来说,如果我们没有足够的访问次数(本例中为100次),我想将订单和访问次数添加到较低的价格点。请注意,在变量'价格'之下是一个浮点数,'价格'的数据类型。在internal_df数据框内是浮点数,而价格和订单是整数。

xcrun simctl help get_app_container

以下是数据样本

if int(internal_df[internal_df['price']==price]['visits']) < 100:
 for index, row in internal_df.iterrows():
   if float(row['price']) > price:
      internal_df.ix[internal_df['price'] == price, 'visits'] = internal_df.ix[internal_df['price'] == price, 'visits'] + row['visits']
      internal_df.ix[internal_df['price'] == price, 'orders'] = internal_df.ix[internal_df['price'] == price, 'orders'] + row['orders']

有没有人有任何建议,或者我应该忽略错误?

布拉德

1 个答案:

答案 0 :(得分:1)

请注意.ix is deprecated,因为它按位置按标签索引,具体取决于索引的数据类型。请改用.loc.iloc

SettingWithCopyWarning可能来自&#34; get&#34;在您提供的代码之上运行几行代码。快速修复可能是找到首次分配internal_df的位置,并将.copy()添加到赋值语句的末尾。例如,如果您有internal_df = df[df['colname'] <= value],请将其更改为internal_df = df[df['colname'] <= value].copy(),并希望这可以解决错误。

另外,我认为如果没有for循环,你可以做你想做的事情,这会更快,更可读!