如何修改 pandas 数据框的一个“单元格”中的值?

Rom*_*man 5 python copy dataframe pandas

我有一个非常简单的问题。我想更改 pandas 数据框给定行的给定列中的值。我尝试通过以下方式做到这一点:

df['column3'].loc[this_date] = val
Run Code Online (Sandbox Code Playgroud)

结果我收到以下警告:

SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
Run Code Online (Sandbox Code Playgroud)

我对此警告的解释是,通过使用列名称 ( 'column3'),loc我并没有真正访问(引用)数据框的所需单元格。相反,我创建一个对象,它是“单元格”对象的副本,然后尝试更改与此“复制对象”关联的值。

我不明白的是它似乎有效。尽管 pandas 写信给我说我尝试修改副本,但我确实修改了原始数据框。

我的问题是如何确保我真的在做我想做的事情以及如何以“正确”的方式去做,这样熊猫就不会抱怨?

小智 1

收到警告的原因是它df本身是其他一些数据帧对象的副本。我猜你有一些原始数据帧df_origin,并且可以通过某些操作(例如切片)df获得。的副本也是df_origin如此。然后,您尝试设置一些值,并出现警告,告诉您这不会更改原始数据帧中的值。如果您不关心 df_origin,一种解决方案是使用单个变量指向切片前后的数据帧对象。否则你可以通过以下方式抑制警告dfdf_origindfdf_originpd.set_option('mode.chained_assignment', None)

您设置值的方式很好,还有以下方式:

 df.ix[this_date, 'column3'] = val
 df.loc[this_date, 'column3'] = val
 df.at[this_date, 'column3'] = val
Run Code Online (Sandbox Code Playgroud)