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

2024-09-13 18:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 01021943号
  • 02031944年
  • 00041945号
  • 00001946号

问题是当我使用to_date函数时,它将date from object的数据类型转换为int64,但我希望它是datetime。第二种方法是使用to\u datetime函数

  • 00041945变为41945
  • 00001946变为1946,因此我无法正确格式化它们

Tags: to数据方法函数fromdatetimedateobject
3条回答

您可以将参数dtype添加到^{}中,以便将列col转换为{},然后将{a2}与参数format一起使用,以指定格式,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

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

^{pr2}$

作为第一个猜测的解决方案,您可以将它作为一个字符串解析到一个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的零值,可以执行以下操作:

^{pr2}$

相关问题 更多 >