You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

命令行传入JSON转Pandas DataFrame异常:列名不符合预期问题排查

修复命令行JSON输入转Pandas DataFrame的异常问题

问题说明

执行命令python script.py --input [{\"A\":\"322|985\",\"B\":3}]传入JSON格式输入,期望生成与pd.DataFrame([{"A":"322|985","B":3}])一致的多列DataFrame,但当前代码仅生成名为0的单列,值为原始JSON字符串,不符合预期。

修复方案

  1. 直接对命令行传入的字符串进行JSON解析,无需先执行json.dumps再json.loads,避免将输入字符串转义后无法正确解析为Python对象。
  2. 解析后的JSON数据本身就是包含字典的列表,直接传入pd.DataFrame即可,无需额外包裹一层列表。
  3. 调整输入验证逻辑,针对字符串类型输入优先做JSON解析。

修复后完整代码

import json
import pandas as pd
import argparse


def validate_input(input_data):
    if isinstance(input_data, pd.DataFrame):
        return input_data  # 已是DataFrame,直接返回
    
    # 直接解析输入的JSON字符串为Python对象
    json_data = json.loads(input_data)
    
    # 解析后的数据本身是列表,直接传入DataFrame
    return pd.DataFrame(json_data)

def process_data(input_data):
    """
    处理数据,仅在输入格式有效时调用
    """
    validated_data = validate_input(input_data)
    print(validated_data)
    print("Processing data:\n", validated_data)

def main():
    parser = argparse.ArgumentParser(description="验证并处理JSON或Pandas DataFrame输入。")
    parser.add_argument("--input", type=str, help="JSON字符串格式的输入数据")
    args = parser.parse_args()
    
    try:
        process_data(args.input)
    except json.JSONDecodeError:
        raise TypeError("无效的JSON输入,请提供合法的JSON字符串。")
    

if __name__ == "__main__":
    main()

修复逻辑说明

原代码中,json.dumps(input_data)会把命令行传入的JSON字符串转成带转义的字符串(比如将[{"A":"322|985","B":3}]变成"[{\"A\":\"322|985\",\"B\":3}]"),再执行json.loads得到的还是原始的字符串,而非解析后的列表字典。此时用pd.DataFrame([json_data])会把整个字符串作为单列数据。

修复后直接对输入字符串做json.loads,得到包含字典的列表[{"A":"322|985","B":3}],这个结构正好符合pd.DataFrame的输入要求,传入后会生成包含A、B两列的DataFrame,与预期一致。

内容的提问来源于stack exchange,提问作者Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:54:51