Dataframe列str为Dataframe列日期

时间:2018-01-25 09:46:21

标签: python python-3.x pandas dataframe python-3.6

我有一个数据帧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来说很新。

非常感谢!

2 个答案:

答案 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