如何处理python系列中的多种日期字符串格式

Posted

技术标签:

【中文标题】如何处理python系列中的多种日期字符串格式【英文标题】:How to deal with multiple date string formats in a python series 【发布时间】:2015-12-27 13:34:21 【问题描述】:

我有一个 csv 文件,我正在尝试对其完成操作。我创建了一个数据框,其中有一列标题为“start_date”,其中包含保修开始日期。我遇到的问题是日期的格式不一致。我想知道从今天的日历日期起经过的天数以及此产品的保修开始日期。

此 start_date 系列中的两个条目示例:

9/11/15
9/11/15 0:00

我如何识别这些格式并相应地处理它们?

【问题讨论】:

请出示您的代码。解释你的代码中到底有什么不工作。发布您从堆栈跟踪中收到的完整错误消息。另外,请阅读:How to ask 【参考方案1】:

不幸的是,您只需要尝试每种可能的格式即可。如果您提供示例格式,strptime 将尝试按照here 的讨论为您解析它。

代码最终看起来像:

import datetime    

POSSIBLE_DATE_FORMATS = ['%m/%d/%Y', '%Y/%m/%d', etc...] # all the formats the date might be in

for date_format in POSSIBLE_DATE_FORMATS :
    try:
        parsed_date = datetime.strptime(raw_string_date, date_format) # try to get the date
        break # if correct format, don't test any other formats
    except ValueError:
        pass # if incorrect format, keep trying other formats

【讨论】:

由于format 是保留名称,我将使用不同的变量名称。我会选择POSSIBLE_DATE_FORMATSdate_format 没问题 ;) 。顺便说一句,您错过了更改 POSSIBLE_FORMATS 变量名【参考方案2】:

你真的有几个选择。我不完全确定当您尝试使用“pd.read_csv”直接加载文件时会发生什么,但如上所述,您可以定义一组格式字符串,您可以尝试使用这些格式字符串来解析数据。

另一种选择是将日期列作为字符串读取,然后自行解析。如果您希望该列类似于“YYYY-MM-DD”,则解析字符串以仅包含该数据,然后将其保存回来,类似于。

import pandas as prandas
import datetime

df = prandas.read_csv('supa_kewl_data.dis_fmt_rox', dtype='start_date': str)

print df.head()
# we are interested in start_date

date_strs = df['start_date'].values
#YYYY-MM-DD
#012345678910
filter_date_strs = [x[0:10] for x in date_strs]
df['filter_date_strs] = filter_date_strs

# sometimes i've gotten complained at by pandas for doing this
# try doing df.loc[:,'filter_date_strs'] = filter_date_strs
# if you get some warning thing

# if you want you can convert back to date time using a 
dobjs = [datetime.datetime.strptime(x,'%Y-%m-%d') for x in filter_date_strs]
df['dobj_start_date'] = dobjs

df.to_csv('even_better_data.csv', index=False)

希望这会有所帮助! Pandas 文档有时很粗略,查看 0.16.2 中的文档 for read_csv() 令人生畏……http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html 图书馆本身就是一流的!

【讨论】:

【参考方案3】:

不确定这是否会有所帮助,但这是我在处理 excel 文件时使用 Pandas 并希望日期格式为“mm/dd/yyyy”或其他格式时所做的。

writer = pd.ExcelWriter(filename, engine='xlsxwriter', datetime_format='mm/dd/yyyy')
df.to_excel(writer, sheetname)

也许它适用于: df.to_csv

【讨论】:

以上是关于如何处理python系列中的多种日期字符串格式的主要内容,如果未能解决你的问题,请参考以下文章

如何处理返回不同格式日期时间的 API 的 LocalDateTime? [复制]

如何处理mysql中的时间戳读取问题

如何处理字符串以在 Python 3 中正确嵌入

在java中如何处理日期格式问题

[IT学习]Python如何处理异常特殊字符

在 python 中进行迭代时如何处理日期时间的 NaT 值?