我有一个数据帧column1 dtype obj,格式为:==>这是数据框的一列
Unknown modifier: $pushAll (9)
此列我想通过向df添加新列来转换为日期列:==>这是将数据帧col1转换为生成错误
的新df列NewDate的代码Col1
02.11.2017
11.11.2017
02.12.2017
25.12.2017
我希望我的结果是:==>这就是我想要的结果。
df['NewDate'] = pd.to_datetime(df['Col1'], format='%d.%m.%Y')
但我的错误是:
Col1 NewDate
02.11.2017 2017-11-02
11.11.2017 2017-11-11
02.12.2017 2017-12-02
25.12.2017 2017-12-25
但是当我尝试这个时,我仍然会得到同样的错误:==>这是我试过的代码,因为上面的警告/错误但是得到了同样的警告/错误
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
有人能指出我正确的方向吗?任何帮助都很受欢迎! PS:对python和pandas来说很新。
非常感谢!
答案 0 :(得分:0)
这看起来似乎不切实际,但这可以帮助您避免警告:
df['NewDate'] = df.loc[:, 'Col1'].apply(lambda x: pd.to_datetime(x, format='%d.%m.%Y'))
答案 1 :(得分:0)
评论中提到的解决方案是正确的。我认为你的问题是没有使用copy
。请参阅以下示例。
如果您有原始数据框df
,然后过滤并获取其子集df2
。您应该使用copy
正确复制值。
In [8]: df
Out[8]:
Col1 NewDate
0 02.11.2017 2017-11-02
1 11.11.2017 2017-11-11
2 02.12.2017 2017-12-02
3 25.12.2017 2017-12-25
In [9]: df2 = df.head(2)
In [10]: df2.loc[:, 'NewDate'] = pd.to_datetime(df2['Col1'].values,
format='%d.%m.%Y')
/home/ks/miniconda2/envs/citius/lib/python2.7/site-
packages/pandas/core/indexing.py:476: 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 caveats in the documentation:
http://pandas.pydata.org/pandas
docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s
In [11]: df2 = df.head(2).copy()
In [12]: df2.loc[:, 'NewDate'] = pd.to_datetime(df2['Col1'].values, format='%d.%m.%Y')
编辑:
如果您没有进行任何chaining
操作,只想关闭此警告,请添加以下行
pd.options.mode.chained_assignment = None