从PostgreSQL导出CSV到Pandas后,如何解析数组字段为Python列表
解析PostgreSQL导出CSV中的JSON数组字段到Python列表
这个场景我太熟了——PostgreSQL导出CSV时,json/jsonb类型的数组会被转成带转义双引号的字符串,直接存在DataFrame里确实没法直接用。不过别担心,用Python内置的json模块就能完美解决,步骤很简单:
1. 先确认字段格式
首先你得确认DataFrame里的目标列内容是标准的JSON数组格式(哪怕带转义)。比如取一行看看实际内容:
print(df['your_array_column'].iloc[0]) # 输出应该类似:'[{"keyOne": "valueOne", "keyTwo": true}, {"keyOne": "valueTwo", "keyTwo": false}]'
2. 用json.loads批量解析
直接对目标列应用json.loads函数,就能把每个字符串转成Python列表+字典的结构,原本的布尔值也会被自动识别成True/False:
import json import pandas as pd # 假设你已经把CSV加载到df里了 df['parsed_array'] = df['your_array_column'].apply(json.loads)
3. 处理可能的解析异常
如果导出的CSV里有格式不规范的行(比如缺失括号、转义错误),直接解析会报错。可以加个异常处理函数,避免整个流程卡住:
def safe_parse_json(s): try: return json.loads(s) except ValueError as e: print(f"解析失败的内容:{s},错误信息:{e}") return [] # 或者返回None,根据你的需求调整 df['parsed_array'] = df['your_array_column'].apply(safe_parse_json)
额外注意:如果字符串首尾有多余引号
有时候PostgreSQL导出的CSV会给字段套一层额外的双引号,导致字符串开头结尾是",这时候要先去掉再解析:
# 先去除首尾的双引号 df['your_array_column'] = df['your_array_column'].str.strip('"') # 再解析 df['parsed_array'] = df['your_array_column'].apply(json.loads)
这样处理完之后,parsed_array列里的每个元素就是你想要的Python列表,里面的字典键值对、布尔值都能正确保留~
内容的提问来源于stack exchange,提问作者Brylie Christopher Oxley
相关产品推荐
相关产品推荐

