全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
9503 4
2017-01-19
我有一个pandas dataframe命名为trade,其中有一列trade['quote_datetime']是日期-时间,形式如下:

2003-04-29 09:30:20.775
... ...
2003-04-29 13:26:24.200

我想把它分解成两列,日期和时间,采用了以下代码:

trade['date']=trade['quote_datetime'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S.%f').date)
trade['time']=trade['quote_datetime'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S.%f').time)


但是编译器(Spyder)报错:ValueError: time data 'quote_datetime' does not match format '%Y-%m-%d %H:%M:%S.%f'
我看了很久,还是不知道我的日期格式错在哪里。。。希望版上的大大能指导我一下,非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-1-20 06:57:54
从语法上来说没有任何错误,不过楼主需要检查 trade['quote_datetime'] 这列的格式, 我试着简单做了一个trade 这个data frame, 步骤如下:

1) 创建 trade data frame
import pandas as pd
import datetime

trade = pd.DataFrame({'quote_datetime': '2003-04-29 09:30:20.775', 'quote_datetime':'2003-04-29 13:26:24.200'}, index=[0,1])
结果 trade
            quote_datetime
0  2003-04-29 13:26:24.200
1  2003-04-29 13:26:24.200

2) 重复你的步骤做日期时间列分离:
trade['date']=trade['quote_datetime'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S.%f').date)
trade['time']=trade['quote_datetime'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S.%f').time)

结果 trade:
quote_datetime                                               date  \
0  2003-04-29 13:26:24.200  <built-in method date of datetime.datetime obj...   
1  2003-04-29 13:26:24.200  <built-in method date of datetime.datetime obj...   
                                                time  
0  <built-in method time of datetime.datetime obj...  
1  <built-in method time of datetime.datetime obj...  

注意这里 time 和 date 列存放的是分离后的对象object, 如有需要可以转化成任何的输出格式

从代码上讲是没有什么错误的,但是需要强调的是楼主的trade['quote_datetime'] 如果存的不是string 或者是什么其他格式,可能就有不match的问题
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-1-20 08:23:29
column has missing values?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-1-20 15:18:33
提拉米苏碎了 发表于 2017-1-20 06:57
从语法上来说没有任何错误,不过楼主需要检查 trade['quote_datetime'] 这列的格式, 我试着简单做了一个tr ...
谢谢您的指导。这个dataframe本来是个csv文件,文件里'quote_datetime'这一列的格式其实是29/4/2003  9:30:21 AM,但是用read_csv导入python之后,再用print(trade.head())查看发现变成了2003-04-29 09:30:20.775。结尾为PM的时间则自动加了12个小时。我也尝试过用%d/%m/%Y  %I:%M:%S.%f %p的格式,但是仍然报错。对此我真的不知道格式到底是哪个了。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-1-21 06:57:43
Kaeder 发表于 2017-1-20 15:18
谢谢您的指导。这个dataframe本来是个csv文件,文件里'quote_datetime'这一列的格式其实是29/4/2003  9:3 ...
这个好说,你单拿出来了这个column 里面的一个值,看看是什么type 就好啦~~~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群