使用 Python 将数字转换为日期格式
Convert number to date format using Python
我正在从一个超过 14000 行的文本文件中读取数据,其中有一列包含八 (08) 个数字。某些行的格式如下:
- 01021943
- 02031944
- 00041945
- 00001946
问题是,当我使用 to_date 函数时,它将日期的数据类型从对象转换为 int64,但我希望它是日期时间。其次通过使用 to_datetime 函数日期
- 00041945 变成 41945
- 00001946 变为 1946,因此我无法正确格式化它们
作为第一个猜测的解决方案,您可以将其作为字符串解析为日期时间实例。类似于:
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
我正在从一个超过 14000 行的文本文件中读取数据,其中有一列包含八 (08) 个数字。某些行的格式如下:
- 01021943
- 02031944
- 00041945
- 00001946
问题是,当我使用 to_date 函数时,它将日期的数据类型从对象转换为 int64,但我希望它是日期时间。其次通过使用 to_datetime 函数日期
- 00041945 变成 41945
- 00001946 变为 1946,因此我无法正确格式化它们
作为第一个猜测的解决方案,您可以将其作为字符串解析为日期时间实例。类似于:
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