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

如何将DataFrame转为字符串并保留所有行以适配第三方脚本?

问题:DataFrame转字符串后合并行导致第三方脚本报错

我编写了一段Python脚本,从数据库获取约100行数据并存入DataFrame,随后将其转为字符串,代码如下:

import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.engine import URL
from sqlalchemy import text
import pandas as pd
import Inspector as spec

connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=data_governor;DATABASE=ProcessingInspector;UID=xyz;PWD=123"
connection_url = URL.create(
    "mssql+pyodbc", query={"odbc_connect": connection_string})

engine = sa.create_engine(connection_url)

# get data from database
qry = text("EXECUTE dbo.InspectionServiceData")
with engine.connect() as con:
    rs = con.execute(qry)

df = pd.read_sql_query(qry, engine)

if __name__ == '__main__':
    # turn the DF into a string
    query_result = df.to_string(header=True, index=False)

    # get all the rows
    rows = [[field.strip() for field in line.split('  ') if field] for line in query_result.splitlines()[2:-1]]

    # send rows to 3rd party script
    for inspection in spec.process_data(rows):
        # testing
        print(inspection)

使用第三方Python脚本Inspector处理每行数据、生成报告时,收到错误:

# Error from system: Expected multiple rows, only found one.

经第三方技术支持确认,问题在于仅传入了一行巨型数据,推测是DataFrame转字符串时合并了所有行。请问如何将DataFrame转为字符串的同时保留所有行?


解决方案

核心问题分析

你当前的问题出在df.to_string()的使用逻辑上:这个方法生成的是格式化的文本表格,字段之间用可变数量的空格填充对齐,而非固定分隔符。后续用split(' ')分割行数据时,会因为字段内容含空格、对齐空格数量不一致等问题,导致分割结果混乱——要么把一行拆成多个片段,要么把多行误合并为一个巨型行,最终传给第三方脚本的不是正确的多行结构。

方案1:跳过字符串转换(最优解)

完全不需要把DataFrame转成字符串,直接用DataFrame的原生方法提取行数据,这是最可靠的方式:

if __name__ == '__main__':
    # 直接将DataFrame转为二维列表,每行对应一个子列表
    rows = df.values.tolist()
    
    # 如果第三方脚本需要带字段名的字典格式,可改用:
    # rows = df.to_dict('records')

    # 传递数据给第三方脚本
    for inspection in spec.process_data(rows):
        print(inspection)

方案2:必须转字符串时用CSV格式(可靠分隔)

如果业务逻辑要求必须转成字符串再处理,建议用CSV格式(固定分隔符),避免空格分割的不确定性:

if __name__ == '__main__':
    # 将DataFrame转为CSV字符串,不含索引和表头(根据需求调整参数)
    csv_str = df.to_csv(index=False, header=False)
    
    # 按行分割,再用逗号拆分每行的字段
    rows = [line.split(',') for line in csv_str.splitlines() if line]

    # 传递数据给第三方脚本
    for inspection in spec.process_data(rows):
        print(inspection)

注意:如果字段内容包含逗号,可指定其他分隔符(如sep='|'),确保分割逻辑准确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:40:23