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

CSV转DataFrame的Python Plans类报错排查与功能扩展咨询

问题分析与代码修正

别担心,我帮你一步步排查问题、修正代码,同时给你一些扩展功能的实用思路,毕竟刚接触Python和Pandas踩点坑很正常~

首先解决触发报错的核心问题

你遇到的AttributeError: module 'pandas' has no attribute 'Dataframe'是拼写错误导致的:Pandas里的DataFrame类首字母是大写的F,你写成了小写的f(pd.Dataframe() → pd.DataFrame()),这是最直接的报错原因。

不过代码里还有其他几个小问题,我一起帮你修正并解释:

修正后的完整代码

import os
from pathlib import Path
import pandas as pd
import datetime

class Plans:
    def __init__(self, file, path):
        self.file = file
        self.path = path
        # 修正拼写错误:Dataframe → DataFrame
        self.df = pd.DataFrame()
        self.tipo = None  # 提前初始化实例属性,避免后续未定义的问题

    def get_dataframe(self):
        # 不用切换目录,直接拼接完整文件路径更安全
        full_path = Path(self.path) / self.file
        self.df = pd.read_csv(full_path, encoding="latin-1", low_memory=False, sep=';')
        
        # 修正:引用实例属性self.df,而不是局部变量df
        if 'data' in self.df.columns:
            self.tipo = 'sales'
            # 同样修正:用self.df['data']
            self.df['data'] = pd.to_datetime(self.df['data'])
        
        # 修正:调用实例方法需要加self.
        return self.clean_unused_data()

    def clean_unused_data(self, custom_columns=None):
        # 默认要删除的列,允许用户传入自定义列覆盖
        default_columns = [
            'id', 'docs', 'sequence','data_in','received', 'banc', 
            'return', 'status', 'return_cod', 'bank_account_return', 
            'id_transcript', 'id_tx','type_order'
        ]
        columns_to_drop = custom_columns if custom_columns else default_columns
        
        # 用Pandas的drop方法批量删除列,比循环del更高效且安全
        self.df = self.df.drop(columns=columns_to_drop, errors='ignore')
        # errors='ignore'表示如果列不存在也不会报错,更健壮
        
        return self.df

关键修正点解释

  1. 拼写错误修复:把pd.Dataframe()改成pd.DataFrame(),这是解决你那个AttributeError的核心。
  2. 实例属性引用修正:所有操作DataFrame的地方都用self.df,而不是直接写df——因为df是绑定在实例上的属性,局部作用域里没有定义df变量。
  3. 方法调用修正:调用clean_unused_data()时必须加self.,否则Python会认为这是一个全局函数,找不到就会报错。
  4. 文件路径优化:用Path(self.path) / self.file拼接完整路径,代替os.chdir——切换目录会影响整个程序的工作目录,容易引发其他路径相关的问题,直接拼接更稳妥。
  5. 删除列的方式优化:用df.drop(columns=...)批量删除列,比循环del self.df[item]更高效,还能通过errors='ignore'避免因列不存在而报错。
  6. 提前初始化属性:在__init__里提前定义self.tipo = None,避免后续如果'data'列不存在时,这个属性未定义的问题。

扩展功能的思路

你提到想实现更多DataFrame转换操作,这里给你几个实用方向:

  • 添加数据验证:在get_dataframe里检查文件是否存在、CSV格式是否正确,比如用try-except捕获FileNotFoundError和pd.errors.ParserError,给用户更友好的提示。
  • 自定义日期列转换:可以给get_dataframe加个参数,比如date_columns,允许用户指定要转换成datetime类型的列,而不是只固定'data'列。
  • 数据清洗扩展:添加比如去除重复值、处理缺失值的方法,比如handle_missing_values(self, strategy='drop'),支持删除或填充缺失值。
  • 导出功能:添加导出DataFrame为CSV、Excel或JSON的方法,比如export_to_excel(self, output_file)。
  • 统计分析:添加生成基本统计信息的方法,比如get_summary_stats(self),返回self.df.describe()的结果。

内容的提问来源于stack exchange,提问作者Guaraci Falcão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:37:32