如何批量从结构化长字符串中提取日期值创建Date新变量
类字典字符串日期提取实现方案
你当前存储的列内容为Python风格的列表嵌套字典结构,目标是提取dataColetaTeste字段下ISO格式时间串中的YYYY-MM-DD日期部分,以下两种方案可覆盖全量数据的提取需求:
方案1:正则匹配提取(性能优先)
该方案不需要做完整结构解析,针对固定格式的特征做匹配,处理速度快,对微小的格式瑕疵容错性强,适合大数据量场景。
匹配逻辑:定位dataColetaTeste字段下iso键对应的时间串,截取前10位日期字符。
Python pandas 实现示例:
import re import pandas as pd # 正则规则:锁定dataColetaTeste区块内iso字段后的日期,避免误匹配其他位置的日期 extract_pattern = re.compile(r"dataColetaTeste.*?'iso': '(\d{4}-\d{2}-\d{2})T") df['Date'] = df['原始字符串列名'].apply( lambda x: extract_pattern.search(x).group(1) if extract_pattern.search(x) else None )
方案2:结构化解析(准确率优先)
如果数据存在字段顺序调整、嵌套层级变动的可能,将字符串转为原生Python对象后按键取值是最稳妥的方案,长期维护成本更低。
注意该字符串使用单引号包裹键值,不属于标准JSON格式,不要直接用JSON库解析,使用Python内置ast库的literal_eval方法可安全完成转换。
Python pandas 实现示例:
import ast import pandas as pd def get_target_date(input_str): try: # 将字符串解析为Python列表对象 parsed_data = ast.literal_eval(input_str) # 逐层按键取值,截取ISO时间串前10位即为目标日期 iso_time = parsed_data[0]['dataColetaTeste']['iso'] return iso_time[:10] except: # 异常格式数据返回空值,避免任务中断 return None df['Date'] = df['原始字符串列名'].apply(get_target_date)
选型参考
- 数据量超百万、字段格式长期稳定时,优先选正则匹配方案,处理效率比结构化解析高30%以上
- 数据来源杂、存在格式迭代可能时,优先选结构化解析方案,不会因为字段顺序、额外字段插入导致提取失败
内容的提问来源于stack exchange,提问作者Lucca Nielsen
相关产品推荐
相关产品推荐

