将YYYYMMDD转换为YYYY-MM-DD,并将HHMMSS转换为HH:MM:SS进行烛台图绘制

时间:2019-04-19 16:59:18

标签: python pandas datetime

我已经尝试寻找答案了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'])

但是第二个代码显示“无效令牌”错误。

我也注意到这段代码执行起来非常慢。如果有更有效的方法,请告诉我。提前非常感谢您的帮助。

3 个答案:

答案 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的优点是格式中的单个空格表示空格,因此字符串中的多个空格可以正确解析。

希望简化事情。