楼主: Kaeder
9200 4

[问答] Pandas DataFrame 的日期格式问题 [推广有奖]

  • 0关注
  • 0粉丝

VIP1+

高中生

45%

还不是VIP/贵宾

-

威望
0
论坛币
8735 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1841 点
帖子
14
精华
0
在线时间
28 小时
注册时间
2016-5-19
最后登录
2020-1-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一个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'
我看了很久,还是不知道我的日期格式错在哪里。。。希望版上的大大能指导我一下,非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:编译器 trade 命名

从语法上来说没有任何错误,不过楼主需要检查 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的问题
已有 2 人评分论坛币 学术水平 热心指数 收起 理由
Kaeder + 5 + 5 精彩帖子
admin_kefu + 20 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 20  学术水平 + 7  热心指数 + 7   查看全部评分

使用道具

藤椅
67890 发表于 2017-1-20 08:23:29 |只看作者 |坛友微信交流群
column has missing values?

使用道具

板凳
Kaeder 发表于 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的格式,但是仍然报错。对此我真的不知道格式到底是哪个了。。。

使用道具

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

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 20:26