python剔除列表异常值_python 迭代更改列表值异常

要处理一批文本类型的日期数据,这些文本日期的格式均为 2008-01-31 00:00:00 这样的格式,目标是通过一个函数转化为 20080131 这样的文本样式,于是乎写了一个转化程序:

def btk_datetime2cvh(table, title):

datetimes = list(table[title])

dmyhms_pattern = re.compile(r"^((?:19|20)\d\d)-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])\s+(20|21|22|23|[0-1]\d:[0-5]\d:\[0-5]\d)$")

for num, dt in enumerate(datetimes):

try:

year, month, day, time = dmyhms_pattern.findall(dt)[0]

if int(month) < 10 and int(day) < 10:

datetimes[num] = year + "0" + str(int(month)) + "0" + str(int(day))

elif int(month) < 10 and int(day) > 10:

datetimes[num] = year + "0" + str(int( month)) + day

elif int(month) > 10 and int(day) < 10:

datetimes[num] = year + month + "0" + str(int(day))

elif int(month) > 10 and int(day) > 10:

datetimes[num] = year + month + day

except (ValueError,TypeError,IndexError):

datetimes[num] = "!" + str(dt)

table[title] = pd.Series(datetimes)

return table

加载 table 数据后,根据 title 获得日期列 datetimes,然后对其进行迭代处理,利用 enumerate 函数获得 datetimes 每次迭代的序号和值,并利用正则表达式获得 year, month, year,time,然后拼接日期并将拼接好的日期写入相应的datetimes[num],最终为了保证出来的日期均为 20121231 这种 8 位文本,特地做了补 "0",结果却很奇葩,大部分结果符合预期,但是仍有部分结果保持原样:

2008-10-11 00:00:00 #异常

2009-10-24 00:00:00 #异常

20070529

20051211

20060818

2016-10-11 00:00:00 #异常

20160503

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170908

20170906

20170906

20170906

20170906

2015-10-13 00:00:00 #异常

20170908

开始还以为是 excle 表中单元格格式设置问题,结果喝茶了了一下,发现拼接出来的确实都是 8 位样式的日期,但是输出相应的 datetimes[num] 竟然像是没有赋值成功一样,原值压根没变······实在百思不得其解,使用的是 python 3.6.8,各位大神帮忙分析一下吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值