如何在Python Pandas的DataFrame字符串列中提取指定日期值?
Pandas提取JSON格式列中的日期值解决方案
问题场景
你的DataFrame中col1列存储的是JSON格式的字符串,需要提取其中A_DT字段的日期部分(格式如2022-05-10),当A_DT为null时,新列col2也为null。之前使用字符串分割的方法因A_DT存在null值和格式差异报错。
解决方案
方法一:解析JSON为结构化数据(最稳妥)
直接将JSON字符串解析为字典,再展开成结构化DataFrame,能避免字符串分割带来的格式依赖问题,自动处理null值:
import pandas as pd import json # 假设你的原始DataFrame为df # 将col1的JSON字符串解析为字典 df['col1_json'] = df['col1'].apply(json.loads) # 展开JSON字典为结构化数据 df_json = pd.json_normalize(df['col1_json']) # 提取A_DT并截取日期部分,null值自动保留为None df['col2'] = df_json['A_DT'].str.split('T').str[0] # 清理临时列 df = df.drop('col1_json', axis=1)
方法二:正则表达式提取(轻量高效)
如果不想解析整个JSON,可使用正则精准匹配A_DT的取值,直接处理日期和null情况:
import pandas as pd # 正则匹配A_DT的取值,兼容null和带引号的日期格式 df['col2'] = df['col1'].str.extract(r'"A_DT":(null|".*?")', expand=False).apply( lambda x: x.strip('"').split('T')[0] if x != 'null' else None )
方案说明
- 原字符串分割方法的问题:当
A_DT为null时,split('A_DT":"')得到的列表长度不足2,访问x[1]会触发索引错误;且依赖JSON键的固定顺序,扩展性差。 - 上述两种方法均能处理
A_DT为null的场景,且不受JSON键顺序影响,更稳定可靠。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

