Python 如何避免';试图在数据帧';的切片副本上设置值;?

Python 如何避免';试图在数据帧';的切片副本上设置值;?,python,pandas,Python,Pandas,我有一个数据帧,df_original: a b 0 10 5 1 12 6 2 14 1 现在我想创建一个新的数据框,其中包含c>5中的所有行,然后在此新数据框上设置一个新列值: df = df_original[df_original['b'] > 5] df['c'] = df['a'] / df['b'] 但我得到一个警告: /Library/Python/2.7/site-packages/ipykernel/__mai

我有一个数据帧,
df_original

     a     b
0    10    5
1    12    6
2    14    1
现在我想创建一个新的数据框,其中包含
c>5
中的所有行,然后在此新数据框上设置一个新列值:

df = df_original[df_original['b'] > 5]
df['c'] = df['a'] / df['b']
但我得到一个警告:

 /Library/Python/2.7/site-packages/ipykernel/__main__.py:25: SettingWithCopyWarning: 
 A value is trying to be set on a copy of a slice from a DataFrame.
 Try using .loc[row_indexer,col_indexer] = value instead
 See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
如果
c
不能回到原始数据帧,我会非常高兴。但是我应该如何正确地做到这一点并避免警告呢?

采取措施避免警告:

In [118]:
df1 = df[df['b'] > 5].copy()
df1['c'] = df1['a'] / df1['b']
df1

Out[118]:
    a  b    c
1  12  6  2.0

这避免了调用中的歧义

您可以使用
assign
,它为数据帧分配一个新列并返回一个新副本。这是在版本0.16.0中添加的:

>>> df.assign(c = df.a / df.b)
    a  b  c
1  12  6  2