我已经尝试寻找答案了4个小时,但是没有运气。任何帮助将是非常可观的。
目标:将20170103转换为2017-01-03,将022100转换为02:21:00进行烛台绘制
date_int = 20170103
df = pd.DataFrame({'date':[date_int]*10})
df['date'] = df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d'))
print(df['date'])
time_int = 020100
df = pd.DataFrame({'time':[time_int]*10})
df['time'] = df['time'].apply(lambda x: pd.to_datetime(str(x), format='%H:%M:%S'))
print(df['time'])
但是第二个代码显示“无效令牌”错误。
我也注意到这段代码执行起来非常慢。如果有更有效的方法,请告诉我。提前非常感谢您的帮助。
答案 0 :(得分:2)
要扩展我的评论,您在这里有些错误。首先,如上所述,第二个示例中使用的格式是错误的。您的数据格式为'%H%M%S'
,因此它是您需要在参数中指定的格式。
使用pd.to_datetime
时,指定的格式表示实际的数据格式,以便可以正确地解析它。
为了进一步修改它,您需要添加Series.dt.strftime
:
date_int = 20170103
df = pd.DataFrame({'date':[date_int]*10})
df.date = pd.to_datetime(df.date, format='%Y%m%d').dt.strftime('%Y-%m-%d')
date
0 2017-01-03
1 2017-01-03
2 2017-01-03
3 2017-01-03
4 2017-01-03
5 2017-01-03
6 2017-01-03
7 2017-01-03
8 2017-01-03
9 2017-01-03
因此,对于第二个示例,您需要:
df.time = pd.to_datetime(df.time, format='%H%M%S').dt.strftime('%H:%M:%S')
答案 1 :(得分:1)
在此,根据我上面的评论。 (对于无效的令牌错误,请将其设置为字符串,并用单引号或双引号引起来)
time_int = '020100'
df = pd.DataFrame({'time':[time_int]*10})
df['time'] = df['time'].apply(lambda x: pd.to_datetime(str(x), format='%H%M%S'))
df['time'] = df['time'].dt.time
print(df['time'])
输出:
0 02:01:00
1 02:01:00
2 02:01:00
3 02:01:00
4 02:01:00
5 02:01:00
6 02:01:00
7 02:01:00
8 02:01:00
9 02:01:00
答案 2 :(得分:0)
我在看这个问题,看起来原来的问题是两个测试用例,它们使用panda包进行了调试。代码运行缓慢的注释表明正在读取日期和时间文件。鉴于烛台图可以与日期时间对象一起使用,也许所有这些都可以简单地解决。
读取每一行都将日期和时间作为单个字符串拉出,例如“ 20170103 022100”。 使用datetime直接解析为datetime对象。
import datetime as dt
ts='20170103 022100'
result=dt.datetime.strptime(ts,'%Y%m%d %H%M%S')
strptime的优点是格式中的单个空格表示空格,因此字符串中的多个空格可以正确解析。
希望简化事情。