当前位置: 首页 > 知识库问答 >
问题:

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

康言
2023-03-14

我有一个非常简单的问题。我想在熊猫数据帧的给定行的给定列中更改一个值。我尝试通过以下方式完成:

df['column3'].loc[this_date] = val

结果,我得到以下警告:

SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

我对这个警告的解释是,通过使用列名称(‘column3’)和loc我实际上无法访问(引用)数据帧的所需单元格。相反,我创建了一个对象,它是“单元格”对象的副本,然后尝试更改与该“副本对象”关联的值。

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

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

共有1个答案

贺俊杰
2023-03-14

出现警告的原因是< code>df本身是某个其他dataframe对象的副本。我猜您有一些原始数据帧< code>df_origin,并且通过一些操作(如切片)从< code>df_origin获得< code>df。因此< code>df是< code>df_origin的副本。然后,您尝试将某个值设置为< code>df,出现警告,告诉您这不会更改原始数据帧< code>df_origin中的值。如果您不关心df_origin,一种解决方案是在切片前后使用单个变量指向dataframe对象。否则,您可以通过< code > PD . set _ option(' mode . chained _ assignment ',None)取消警告

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

 df.ix[this_date, 'column3'] = val
 df.loc[this_date, 'column3'] = val
 df.at[this_date, 'column3'] = val
 类似资料:
  • 问题内容: 我想用NaN替换数据框列中的错误值。 但是,最后一行失败,并发出警告,因为它正在处理df副本。那么,处理此问题的正确方法是什么?我已经见过许多使用iloc或ix的解决方案,但是在这里,我需要使用布尔条件。 问题答案: 只需使用: 您正在尝试的操作称为链索引:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#index

  • 问题内容: 我有一个熊猫数据框。我想“落后”我的专栏之一。例如,这意味着将整个列“ gdp”上移一位,然后删除其余行底部的所有多余数据,以使所有列的长度再次相等。 无论如何要这样做? 问题答案:

  • 我有一个数据框,只有一列和1200行。每行中总共有3个可能的值-“无差异”、“异性”或“同性”。列标题是“Friends”,我试图使用 但结果是一个空的数据帧(df2)

  • 我有一些蛋白质结构数据,我已将其转换为Pandas DataFrame。 有一列对应于氨基酸残基,标记为< code>resi。 我想选择<code>resi<code>值出现在其他列表中的所有行。现在,我可以使用以下方法选择存在的行: 如何选择行,以便包含疏水残基的行都被选中,而不在数据帧选择器中写入更多条件?据我所见,Pandas关于字符串方法的文档不允许我传递值列表。

  • 问题内容: 我有一个Pandas数据框,其中一列包含文本。我想获得一列出现在整列中的唯一单词的列表(空格是唯一的拆分)。 输出应如下所示: 获得计数也没有什么坏处,但这不是必需的。 问题答案: 使用来创建唯一元素的序列。 进行一些清理以使小写字母的字符串分解: 该列中的每个列表都可以传递给函数以获取唯一值。使用这样做: 或与from注释一起使用:

  • 问题内容: 我遇到了一个看似简单的问题:在熊猫数据框中删除唯一的行。基本上与的相反。 假设这是我的数据: 当A和B唯一时,我想删除行,即我只保留行1和2。 我尝试了以下方法: 但是我只能得到第2行,因为唯一性是0、1和3! 问题答案: 选择所有重复行的解决方案: 您可以使用子集和参数来选择所有重复项: 解决方案: 对所有唯一行进行了一些修改的解决方案: