让df
成为pandas.DataFrame
个对象。设se
为pandas.Series
个对象。
df
的列是se
的索引。
我希望从df
向se
添加新行,并将索引设置为555
。
我使用的命令是df.loc[555]=se
。
它似乎有效吗?
我知道正在尝试在DataFrame的片段副本上设置一个值 错误/警告。
我明白了,我已经阅读了文档。
但有两个问题:
感谢。
答案 0 :(得分:1)
- 我真的应该关心警告吗?
醇>
这取决于。在您的示例中,您首先引用数据的子集(df.loc[555]
),然后在此子集上设置值。几乎总是pandas生成copy
原始数据,并且副本上的设置值不会修改原始Dataframe,因此警告。
在某些情况下,pandas会生成原始数据的view
(例如:如果所有列都具有相同的dtype。),此处的设置值将按预期工作。
如果数据框中的所有列都具有相同的dtype(例如:所有浮点数)并且您在单个现有索引上使用iloc
,那么您将获得一个视图,并且可以忽略该警告。如果您设置的是不存在的索引,则为Setting with enlargment,这也是预期的行为,也可以忽略该警告。
- 建议的方法是什么,以便不会弹出警告?
醇>
鉴于您提供的信息,您使用df.loc
似乎没问题。您有几种方法可以避免警告:
首先,更新您的熊猫版本。每个版本的这些误报警告的情况都在改善,我在0.15.1中没有得到任何结果。
其次,如果您确定您正在做的是预期的行为,那么您可以通过以下方式在全球范围内消除警告:
pd.set_option('chained_assignment', None)
最后,在某些情况下,您可以设置生成对象的is_copy
属性,从而有效禁用对此对象的检查,例如:
df_temp = df.loc[555]
df_temp.is_copy = False
请注意,最后一个选项只能用于现有索引,对于新索引,这会引发KeyError
。