2017-12-18 351 views
1

我的数据集有日期列中的值,如以下格式:大熊猫日期时间格式转换

date 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 
[datetime.date(2017, 2, 17)] 

我想将它们转换成日期时间数据类型的让我不能在它进行时间序列分析。

我已经写在下面的方法:但它给我值误差

df_scores['date']=pd.to_datetime(df_scores['date'],format='[datetime.date("%Y, %m, %d")]') 
+0

'pd.to_datetime(df_scores [ '日期'] str的[0]。)'? –

+0

它是一个日期时间列表的列吗?或者它是一串字符串? –

+0

一串字符串。我想要转换成日期时间格式。 –

回答

1

如果您的列是列表中的一列date对象,则这应该就足够了 -

df.date = pd.to_datetime(df_scores['date'].str[0], errors='coerce') 

如果你有一个字符串的列,您可以使用str.findall提取日期的文物,并str.join加入他们在to_datetime理解的格式。

i = df.date.astype(str)\ 
     .str.findall('\d+')\ 
     .str.join('/') 
df.date = pd.to_datetime(i, errors='coerce') 

astype(str),如果你有一个字符串的列表的列,而不是字符串的列是必需的。如果您的列中存在格式错误的数据,则可能还需要其他参数errors='coerce'


df 

     date 
0 2017-02-17 
1 2017-02-17 
2 2017-02-17 
3 2017-02-17 
4 2017-02-17 
5 2017-02-17 
6 2017-02-17 
7 2017-02-17 
8 2017-02-17 
9 2017-02-17 
10 2017-02-17 
11 2017-02-17 
+0

生成的数据帧的日期类型为“非空datetime64 [ns]”。 它为什么说非null?当它应该只是datatime64 –

+0

@MayurMahajan所以,这意味着它的工作......除非你有其他问题?据我所知,没有任何区别。 –

+0

我不明白为什么它说非空datetime64 [ns]。 –

0

如果你from datetime import datetime 那么你应该指定日期如下: [datetime(2017, 2, 17)] 这将导致<class 'pandas._libs.tslib.Timestamp'>类型的项目,你可以转换为日期时间使用.to_datetime()

0

这应该工作:

df_scores['date']=pd.to_datetime(df_scores['date'],format="[datetime.date(%Y, %m, %d)]") 
+0

ValueError:time data'[datetime.date(2013,7,31),datetime.date(2013,8,1)]'与格式'[datetime.date(%Y,%m,%d)]不匹配'(match) –

+0

那么你的数据框中的单行可以有两个或更多的日期值? –

+0

没有DF没有2个或更多数据值。 –