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

时间:2015-09-29 22:16:37

标签: python python-2.7 date pandas

我有一个csv文件,我正在尝试完成操作。我创建了一个数据框,其中一列标题为" start_date"它有保修日期开始。我遇到的问题是日期的格式不一致。我想知道从今天的日历日期开始的天数和该产品的保修日期。

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

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

如何识别这些格式并对其进行相应处理?

3 个答案:

答案 0 :(得分:7)

不幸的是,你只需要尝试它可能的每种格式。如果您提供示例格式,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

答案 1 :(得分:0)

你真的有几个选择。我不完全确定当您尝试使用' 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中的doc,因为read_csv()令人生畏...... http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html 图书馆本身就是一流的!

答案 2 :(得分:0)

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

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

也许它可以和:     df.to_csv