我正在处理一些数据,我试图使用不重置值的方法将整个列转换为不同的格式(即从对象到日期时间或从对象到数字)。下面的每一行代码都会返回“SettingwithCopyWarning”错误:
#converting euro values column 'value' to numeric values:
df['value'] = pd.to_numeric(df.value, errors='coerce')
#converting object to datetime in order to extract year:
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.year
如果我留下上述任何一行,则会导致错误。如果我将它们全部取出,代码不会引发任何警告。
经过一些研究,我了解到使用链式分配时会出现“SettingwithCopyWarning”,并且视图是数据框的副本,而不是数据框本身,(参考:https ://www.dataquest.io/blog/settingwithcopywarning / )。
我还了解到,避免链式分配的一般形式是df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>
(参考:python pandas:如何避免链式分配)。
我试图像这样争论一些东西只是为了测试表格:
df.loc[df['value']] = pd.to_numeric(df.value, errors='coerce')
但它返回一个错误,如:
KeyError: "['$3.40m' '$3.90m' '$12.60m' '$13.80m' '$123.80m' '$171.20m'\n '$205.2m' '$214.40m' '$221.03m'] not in index"
这让我觉得我试图把它塞进去的一般形式是把它当作字典混淆并引发 KeyError。
环顾四周后,我不确定如何将其应用于使用方法(点函数)而不使用链式分配的整个列(如我的代码)。
有没有解决的办法?
编辑:
给定代码上方的行:
parent_df = pd.DataFrame.from_records(data, columns = ['date', value'])
df = parent_df[parent_df.date.str.contains('.*201[4-9]')]