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

Python函数无法返回预期DataFrame输出问题求助

问题分析与修复方案

核心问题点

  • 循环提前终止:你把return DFTrust_Text1写在了for循环的第一次迭代里,导致函数只处理2021年的数据就直接返回,2022年的逻辑完全没执行,后面的year=year+1也是无效代码。
  • 未接收函数返回值:调用Accessingtxt_func(Trustcode)时,没有把函数返回的DataFrame赋值给外部变量,外部的DFTrust_Text1始终是初始空表。
  • Year字段类型错误:'Year': {year}会把年份存成集合(比如{2021}),应该直接用year变量。
  • 低效的append用法:pandas的append方法已被弃用,多次调用会影响性能,推荐用列表收集数据后一次性转DataFrame。

修复后的函数代码

import pandas as pd
import os
from pdfminer.high_level import extract_text  # 假设你用的是pdfminer提取文本

def Accessingtxt_func(Trustcode):
    data_list = []  # 用列表暂存所有数据,避免多次append
    for year in range(2021, 2023):
        # 先提取PDF文本
        txt_content = extract_text(f'Trust{Trustcode}-{year}a.pdf') 
        # 写入文本文件
        with open(os.path.join(mypath, f'{ts}Trust{Trustcode}-{year}a.txt'), 'w', encoding='utf-8') as fw:
            fw.write(txt_content)   
        # 分割文本并添加到数据列表
        txt_split = txt_content.split('\n\n')
        data_list.append({
            'Text': txt_split, 
            'Year': year,  # 直接用年份数值,不要集合
            'Month': 9, 
            'Type': 1, 
            'Trustcode': Trustcode
        })
    # 一次性生成DataFrame
    return pd.DataFrame(data_list, columns=['Text','Month','Year','Type', 'Trustcode'])

修复后的调用代码

# 初始化总DataFrame
DFTrust_Text1 = pd.DataFrame(columns=['Text','Month','Year','Type', 'Trustcode'])
for Trustcode in range(12,14):
    print(Trustcode)
    # 接收函数返回的结果,并合并到总表
    temp_df = Accessingtxt_func(Trustcode)
    DFTrust_Text1 = pd.concat([DFTrust_Text1, temp_df], ignore_index=True)
# 查看结果
print(DFTrust_Text1.head())

额外说明

  • 把文件写入操作移到文本提取之后,逻辑更清晰,减少嵌套层级;
  • 列表收集数据再转DataFrame的方式,比多次调用append效率更高,也符合pandas官方推荐的写法;
  • 调用时必须接收函数返回值,否则函数处理的结果无法传递到外部变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:32:50