2014-12-08 63 views
0

将行添加到熊猫数据帧让df成为pandas.DataFrame对象。假设se是一个pandas.Series对象。从系列

df的列是se的索引。

我想从sedf添加一个新行并将索引设置为555

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

它的作品,似乎?

我得到那个一个值试图在DataFrame的一个片段的副本上设置一个错误/警告的

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

两个问题,但:

  1. 我应该真正关心的警告?
  2. 什么是推荐的方式去做这个,这样的警告不会弹出?

谢谢。

+0

输入数据和预期输出的任何示例都是有用的。 – Marcin 2014-12-08 00:42:48

+0

感觉像一个很好的答案是没有这个提供。 – user3659451 2014-12-08 18:39:37

回答

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

这取决于。在您的示例中,您首先引用数据的一个子集(df.loc[555]),然后在该子集上设置值。几乎总是熊猫使原始数据的copy和副本上的设置值不会修改原始数据帧,因此警告。

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

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

  1. 什么是推荐的方法去做到这一点,使警告不会弹出?

您使用的df.loc给你提供的信息似乎好。你有几种选择,以避免警告:

首先,更新您的熊猫版本。这些误报警的情况在每个版本都有所改进,我在0.15.1中没有收到任何信息。

其次,如果你确信你在做什么是预期的行为,那么你可以只用沉默全球警告:

pd.set_option('chained_assignment', None) 

最后,在某些情况下,你可以设置你造成的is_copy财产对象有效地禁用这个检查对象上,例如:

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

注意,这个最后的选择只能在现有的索引使用,在新的索引这就提出了一个KeyError