我的数据中的日期变量有多种格式,例如 DD / MM / YYYY d / MM / YY DD / M / YYYY 2017年12月8日 27/08/17 2017年8月9日 2017年10月9日 15/09/17 ..
我需要将这些多种格式更改为一种格式,如DD / MM / YYYY
尝试创建解析函数
def parse_date(date):
if date == '':
return None
else:
return dt.strptime(date, '%d/%m/%y').date()
当我将此函数应用于我的数据集时,它会抛出以下错误..
“ValueError Traceback(最近一次调用最后一次) in() ----> 1 data.Date = data.Date.apply(parse_date)
Unconverted Data Remains Error ValueError:未转换的数据仍然存在:17“
如何解决未转换的数据仍然是错误?
答案 0 :(得分:3)
您可以使用 dateutil module 执行此操作
import dateutil.parser as dparser
a = ["12/8/2017", "27/08/17", "8/9/2017", "10/9/2017", "15/09/17"]
for i in a:
print dparser.parse(i,fuzzy=True).date()
<强>结果:强>
2017-12-08
2017-08-27
2017-08-09
2017-10-09
2017-09-15
答案 1 :(得分:1)
这是因为library(stringr)
matches=str_locate_all(c,"-")
chars=sapply(matches,function(x) x[nrow(x),])[1,]
str_sub(c,1,chars-1)
需要一个4位数字。
为了涵盖多种日期格式,您可以查看%y
库。 ({{3}})
否则,您必须自己手动浏览可能的类型或延长日期。如果您确定只需要扩展年份部分,则可以在将字符串提供给解析器之前执行此类操作:
dateparser
我认为使用date_parts = date.split('/')
if len(date_parts[2]) == 2:
date_parts[2] = "20" + date_parts[2]
date = '/'.join(date_parts)
库是可行的方法,因为它更容易扩展。
答案 2 :(得分:0)
基本方法是在斜杠上拆分字符串,然后使用正确的位数重新连接它们。一个简单的方法:
date = "12/8/2017"
parts = date.split("/")
print(parts) # ['12', '8', '2017']
if len(parts[0]) == 1:
parts[0] = "0" + parts[0]
if len(parts[1]) == 1:
parts[1] = "0" + parts[1]
if len(parts[2]) == 2:
parts[2] = "20" + parts[2]
newDate = "/".join(parts)
# or
newDate = parts[0] + "/" + parts[1] + "/" + parts[2]
print(newDate) # 12/08/2017
然后,您始终拥有一致的日期格式。 (如果您的日期延续到上个世纪,则需要额外检查。)
我会先测试一下,然后考虑其他答案&#39;如果这不符合要求就会接近。