从系列中添加行到pandas数据帧

时间:2014-12-08 00:20:47

标签: python pandas

df成为pandas.DataFrame个对象。设sepandas.Series个对象。

df的列是se的索引。

我希望从dfse添加新行,并将索引设置为555

我使用的命令是df.loc[555]=se

它似乎有效吗?

我知道正在尝试在DataFrame的片段副本上设置一个值 错误/警告。

我明白了,我已经阅读了文档。

但有两个问题:

  1. 我真的应该关心警告吗?
  2. 建议的方法是什么,以便不会弹出警告?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 我真的应该关心警告吗?
  2.   

这取决于。在您的示例中,您首先引用数据的子集(df.loc[555]),然后在此子集上设置值。几乎总是pandas生成copy原始数据,并且副本上的设置值不会修改原始Dataframe,因此警告。

在某些情况下,pandas会生成原始数据的view(例如:如果所有列都具有相同的dtype。),此处的设置值将按预期工作。

如果数据框中的所有列都具有相同的dtype(例如:所有浮点数)并且您在单个现有索引上使用iloc,那么您将获得一个视图,并且可以忽略该警告。如果您设置的是不存在的索引,则为Setting with enlargment,这也是预期的行为,也可以忽略该警告。

  
      
  1. 建议的方法是什么,以便不会弹出警告?
  2.   

鉴于您提供的信息,您使用df.loc似乎没问题。您有几种方法可以避免警告:

首先,更新您的熊猫版本。每个版本的这些误报警告的情况都在改善,我在0.15.1中没有得到任何结果。

其次,如果您确定您正在做的是预期的行为,那么您可以通过以下方式在全球范围内消除警告:

pd.set_option('chained_assignment', None)

最后,在某些情况下,您可以设置生成对象的is_copy属性,从而有效禁用对此对象的检查,例如:

df_temp = df.loc[555]
df_temp.is_copy = False

请注意,最后一个选项只能用于现有索引,对于新索引,这会引发KeyError