我有一个 CSV 文件,其中包含一个名为 start_date 的字段,其中包含各种格式的数据。
一些格式包括例如 June 23, 1912 或 5/11/1930(月、日、年)。但并非所有值都是有效日期。
我想在 start_date 列旁边添加一个 start_date_description 字段,以过滤无效的日期值。最后,将 start_date 中的所有有效日期值标准化为 ISO 8601(即 YYYY-MM-DD)。
到目前为止,我只能将 start_date 加载到我的文件中,我被卡住了,希望得到 ant 的帮助。拜托,任何解决方案,尤其是不使用库的解决方案都会很棒!
import csv
date_column = ("start_date")
f = open("test.csv","r")
csv_reader = csv.reader(f)
headers = None
results = []
for row in csv_reader:
if not headers:
headers = []
for i, col in enumerate(row):
if col in date_column:
headers.append(i)
else:
results.append(([row[i] for i in headers]))
print results
请您参考如下方法:
一种方法是使用dateutil模块,可以像下面这样解析数据:
from dateutil import parser
parser.parse('3/16/78')
parser.parse('4-Apr') # this will give current year i.e. 2017
然后可以通过以下方式解析为您的格式
dt = parser.parse('3/16/78')
dt.strftime('%Y-%m-%d')
假设您有数据框格式的表,您现在可以定义解析函数并应用到列,如下所示:
def parse_date(start_time):
try:
return parser.parse(x).strftime('%Y-%m-%d')
except:
return ''
df['parse_date'] = df.start_date.map(lambda x: parse_date(x))
