将int64(YYYYMMDDHHMMSS)列转换为不带分隔符的datetime64

时间:2017-07-11 07:26:09

标签: python python-3.x pandas datetime

这是我的pandas数据框中的数据。我想将 dateTime 列转换为 datetime64 ,以便检查是否存在重复的 fileName ,然后找到包含最新 dateTime的文件

你可以看到这里的日期时间格式是 YYYYMMDDHHMMSS 没有分隔符

                      filePath        dateTime fileName
0  Line20170601142525_line1.dat  20170601142525    line1
1  Line20170601142525_line2.dat  20170601142525    line2
2  Line20170601142526_line2.dat  20170601142526    line2
3  Line20170601142526_line3.dat  20170601142526    line3

Process finished with exit code 0

这是我的代码

formattedFileDirectory['dateTime'] = pandas.to_datetime(formattedFileDirectory['dateTime'], format='%Y%M%d%H%m%S')

我收到此错误

TypeError: 'int' object is unsliceable

如果我将列设置为字符串,我会收到此错误

ValueError: unconverted data remains: 5

2 个答案:

答案 0 :(得分:3)

我相信您需要将dateTime列从int类型转换为string类型,然后才能在其上调用pd.to_datetime

如果您收到有关“未转换数据”的ValueError,它通常会告诉您指定的字符串或格式是错误的。尝试将'%Y%M%d%H%m%S'更改为'%Y%m%d%H%M%S'。您可以找到格式字符串here的文档(一直滚动到底部)。

答案 1 :(得分:1)

我相信这是您使用pandas.DataFrame.apply寻找的内容:

df['dateTime'] = df['dateTime'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d%H%M%S'))

如果您不想使用apply,因为它很慢(因为它是一个循环),您仍然可以使用它:

df['dateTime'] = pd.to_datetime(df['dateTime'].astype(str),format='%Y%m%d%H%M%S')

输出:

                       filePath            dateTime fileName
0  Line20170601142525_line1.dat 2017-06-01 14:25:25    line1
1  Line20170601142525_line2.dat 2017-06-01 14:25:25    line2
2  Line20170601142526_line2.dat 2017-06-01 14:25:26    line2
3  Line20170601142526_line3.dat 2017-06-01 14:25:26    line3