我正在使用Jupyter笔记本(不确定这是否相关)而且我无法理解为什么Pandas会抛出SettingWithCopyWarning而只是在某种情况下。
这是我的代码的第一个版本:
def read_in_yearly_data(file_name):
print('\t%s' % file_name)
df = pd.read_csv('../' + file_name + '.csv', header=None)
# Drop the first 4 columns, and set names of the remaining 4 columns
for i in range(4):
del df[i]
df.columns = ['Part_Name', 'Date', 'Description', 'Units']
return df
yearly_data = []
for year in ['09', '10', '11']:
yearly_data.append(read_in_yearly_data('20' + year + ' data'))
all_data = pd.concat(yearly_data, axis=0, join='outer')
parts_to_exclude = misc.PART_NAMES
all_data = all_data.query('Part not in @parts_to_exclude')
all_data['Units'] = all_data['Units'].apply(lambda x: hf.to_int(x))
第二个版本(将代码包装在一个函数中):
def read_in_yearly_data(file_name):
print('\t%s' % file_name)
df = pd.read_csv('../' + file_name + '.csv', header=None)
# Drop the first 4 columns, and set names of the remaining 4 columns
for i in range(4):
del df[i]
df.columns = ['Part_Name', 'Date', 'Description', 'Units']
return df
def myfunc():
yearly_data = []
for year in ['09', '10', '11']:
yearly_data.append(read_in_yearly_data('20' + year + ' data'))
all_data = pd.concat(yearly_data, axis=0, join='outer')
parts_to_exclude = misc.PART_NAMES
all_data = all_data.query('Part not in @parts_to_exclude')
all_data['Units'] = all_data['Units'].apply(lambda x: hf.to_int(x))
my_func()
调用hf.to_int(x)
获取'单位'并将其转换为整数(某些单位存储为字符串并使用逗号,例如'2,000.0'。
第一个版本的代码在第二个版本没有产生警告。
甚至将最后一行更改为
all_data.loc[:, 'Units'] = all_data['Units'].apply(lambda x: hf.to_int(x))
在第二个版本中没有改变任何东西,我很难理解为什么。
答案 0 :(得分:0)
如果更改
,错误就会消失all_data = all_data.query('Part not in @parts_to_exclude')
要:
all_data = all_data.query('Part not in @parts_to_exclude').copy()
我还不太清楚为什么当它不在函数中时它没有给你一个错误。