使用 Python 将数字转换为日期格式

Convert number to date format using Python

我正在从一个超过 14000 行的文本文件中读取数据,其中有一列包含八 (08) 个数字。某些行的格式如下:

问题是,当我使用 to_date 函数时,它将日期的数据类型从对象转换为 int64,但我希望它是日期时间。其次通过使用 to_datetime 函数日期

作为第一个猜测的解决方案,您可以将其作为字符串解析为日期时间实例。类似于:

from datetime import datetime

EXAMPLE = u'01021943'

dt = datetime(int(EXAMPLE[4:]), int(EXAMPLE[2:4]), int(EXAMPLE[:2]))

...不太关心性能问题。

import datetime

def to_date(num_str):
    return datetime.datetime.strptime(num_str,"%d%m%Y")

请注意,对于零值,这也会引发异常,因为此输入的预期行为不明确。
如果你想对零值有不同的行为,你可以用 try & except,
来实现 例如,如果你想获得 None 的零值,你可以这样做:

def to_date(num_str):
    try:
        return datetime.datetime.strptime(num_str,"%d%m%Y")
    except ValueError, e:
        return None

您可以使用参数 format 将参数 dtype 添加到 read_csv for converting column col to string and then use to_datetime 以指定格式和 errors='coerce' - 因为错误的日期,将转换为 NaT :

import pandas as pd
import io

temp=u"""col
01021943
02031944
00041945
00001946"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), dtype={'col': 'str'})

df['col'] = pd.to_datetime(df['col'], format='%d%m%Y', errors='coerce')

print (df)
         col
0 1943-02-01
1 1944-03-02
2        NaT
3        NaT

print (df.dtypes)
col    datetime64[ns]
dtype: object

感谢 提供另一个解决方案:

import pandas as pd
import io

temp=u"""col_name
01021943
02031944
00041945
00001946"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), 
                 converters={'col_name': lambda dt: pd.to_datetime(dt, format='%d%m%Y', errors='coerce')})

print (df)
    col_name
0 1943-02-01
1 1944-03-02
2        NaT
3        NaT

print (df.dtypes)
col_name    datetime64[ns]
dtype: object