在indexing.py中设置WithCopyWarning

时间:2017-12-10 04:50:26

标签: python pandas

我正在开展我的第一个Pandas项目,当人们第一次熟悉Pandas时,我遇到了一个非常常见的问题:SettingWithCopyWarning。我理解其他StackOverflow答案背后的原因,其中有很多答案;但是,我不确定如何在我的特定情况下处理这个问题。有问题的线在这里。我稍微简化了一些对这里发生的事情没有任何影响的行(例如read_excel)。

raw_df = pd.read_excel('infile.xlsx')
baseline_df = raw_df[raw_df['oe_aftermarket']=='OEM']
baseline_df = baseline_df.groupby(key_params).sum().reset_index()
starts_with_z = baseline_df['platform'].str.startswith('Z -').fillna(False)
baseline_df[starts_with_z]['platform'] = 'X-' + baseline_df[starts_with_z]['market']

然后,我希望此代码首先从Excel读取文件,然后抓取oe_aftermarket中的值等于OEM的数据子集。它按一组预定的关键参数进行分组,然后将platform列开头的那些行项与字符串Z -隔离,填充NA值,其中Pandas不会将数字转换为字符串。最后,那些包含以Z -开头的平台的订单项会将其平台替换为X-,后跟market列中的任何值。

不幸的是,我在最后一行得到了臭名昭着的SettingWithCopyWarning

oe_test.py:76: SettingWithCopyWarning: blah blah

替换违规行
baseline_df[starts_with_z].loc[:,'platform'] = 'X-' + baseline_df[starts_with_z]['market']

根据之前的警告建议确实有点不同。同样的警告会再次被抛出,但这次是在Pandas的indexing.py中:

/home/james/.local/share/virtualenvs/tdg-99-fk6tK/lib/python3.5/site-packages/pandas/core/indexing.py:537: SettingWithCopyWarning: blah blah`

我已经尝试将.copy()添加到制作副本的初始行baseline_df = raw_df[raw_df['oe_aftermarket']=='OEM'],但无济于事。在修复代码问题时,我通常非常方便,但我现在很困惑,特别是因为Pandas'自己的代码,而不是我的。

非常感谢任何人的见解!

0 个答案:

没有答案