Python pandas 删除SettingWithCopyWarning [英] Python pandas removing SettingWithCopyWarning
问题描述
所以我用制作了一个空的数据框
So I made an empty dataframe using
df=data[['ID','Matrix','Name','Country', 'Units']]
df['Value']=''
我用这样的代码填充它,该代码在df.Matrix
中查找包含'Good','Bad'值的字符串,并在sch[i]
中填充它们的值:
and I am filling it in with code like this, which finds strings containing values of 'Good', 'Bad' in df.Matrix
and filling them with values in sch[i]
:
df.loc[df.Matrix.str.contains('Good'),'Value'] = sch[2]
df.loc[df.Matrix.str.contains('Bad'),'Value'] = sch[6]
df.loc[df.Matrix.str.contains('Excellent'),'Value'] = sch[8]
我遇到了很多类似这两个不同错误的错误:
I have been getting a bunch of errors like both of these two different ones:
C:\Python33\lib\site-packages\pandas\core\strings.py:184: UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
" groups, use str.extract.", UserWarning)
C:\Users\0\Desktop\python\Sorter.py:57: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
df.loc[df.Matrix.str.contains('Bad'),'Value'] = sch[6]
到目前为止,我正在使用禁止显示代码
So far I am suppressing the code using
pd.options.mode.chained_assignment = None
如果我不取消错误消息,我将获得大约20条错误消息.我可以更改数据的其他格式吗?这样我就不会收到错误消息?
If I do not suppress the error messages I will get about 20 of them. Is there another format I can change the data so that I do not get the error message?
如果有帮助,我正在使用python 3和pandas 0.131
I am using python 3 and pandas 0.131 if it helps
推荐答案
此处很好地说明了为什么打开此警告的原因:
Here is a good explanation of why this warning was turned on:
您确定这就是您的所有代码吗?请显示您的所有操作.
Are you sure that is all of your code? Pls show all of what you are doing.
In [13]: df = DataFrame(index=range(5))
In [14]: df['Value'] = ''
In [15]: df.loc[[1,4],'Value'] = 'bad'
In [16]: df.loc[[0,3],'Value'] = 'good'
In [17]: df
Out[17]:
Value
0 good
1 bad
2
3 good
4 bad
[5 rows x 1 columns]
第二个例子
In [1]: df = DataFrame(index=range(5))
In [2]: df['Value'] = ''
In [3]: df2 = DataFrame(dict(A=['foo','foo','bar','bar','bah']))
In [4]: df
Out[4]:
Value
0
1
2
3
4
[5 rows x 1 columns]
In [5]: df2
Out[5]:
A
0 foo
1 foo
2 bar
3 bar
4 bah
[5 rows x 1 columns]
In [6]: df.loc[df2.A.str.contains('foo'),'Value'] = 'good'
In [7]: df.loc[df2.A.str.contains('bar'),'Value'] = 'bad'
In [8]: df
Out[8]:
Value
0 good
1 good
2 bad
3 bad
4
[5 rows x 1 columns]
这篇关于Python pandas 删除SettingWithCopyWarning的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!