我有一个csv文件,我正在尝试完成操作。我创建了一个数据框,其中一列标题为" start_date"它有保修日期开始。我遇到的问题是日期的格式不一致。我想知道从今天的日历日期开始的天数和该产品的保修日期。
此start_date系列中的两个条目示例:
9/11/15
9/11/15 0:00
如何识别这些格式并对其进行相应处理?
答案 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