含nan元素的日期列表拆分报错,求保留nan的解决方案
解决日期列表含'nan'时的拆分报错问题
这个问题我之前也碰到过!核心原因是当列表里的元素是'nan'时,elem.split()只会返回一个元素的列表,而你试图把它解包成date和time两个变量,这就触发了ValueError。要保留'nan'同时提取日期,有几种简单的解决办法:
方法一:显式判断'nan'元素
最直观的方式就是先检查当前元素是不是'nan',如果是直接加入结果列表,否则再执行拆分操作:
date_time_list =["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01", 'nan'] date_list = [] for elem in date_time_list: if elem == 'nan': date_list.append(elem) else: date, time = elem.split() date_list.append(date) print(date_list) # 输出: ['2019-11-01', '2019-11-01', '2019-11-01', 'nan']
方法二:用try-except捕获异常
如果你的列表里可能还有其他格式不正确的元素(不只是'nan'),用异常捕获会更健壮,能处理所有无法拆分为两个部分的情况:
date_time_list =["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01", 'nan'] date_list = [] for elem in date_time_list: try: date, time = elem.split() date_list.append(date) except ValueError: # 处理所有无法拆分的情况,比如'nan'或格式错误的字符串 date_list.append(elem) print(date_list) # 输出: ['2019-11-01', '2019-11-01', '2019-11-01', 'nan']
方法三:用列表推导式+maxsplit参数(最简洁)
利用split(maxsplit=1)只拆分一次的特性,不管元素能不能拆分,直接取拆分后的第一个元素。对于有效日期,拆分后第一个元素是日期;对于'nan',拆分后还是只有一个元素,直接保留即可:
date_time_list =["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01", 'nan'] date_list = [elem.split(maxsplit=1)[0] for elem in date_time_list] print(date_list) # 输出: ['2019-11-01', '2019-11-01', '2019-11-01', 'nan']
这三种方法都能满足你的需求,你可以根据列表的实际情况选择最合适的一种~
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

