简体   繁体   English

AssertionError:DataFrame 预期类型<class 'pandas.core.frame.DataFrame'> , 成立<class 'NoneType'>反而

[英]AssertionError: DataFrame Expected type <class 'pandas.core.frame.DataFrame'>, found <class 'NoneType'> instead

How can I change a class to force it to return a pandas dataframe, not as a object but in a similar fashion to how a function would.如何更改一个类以强制它返回一个 pandas 数据帧,而不是作为一个对象,而是以类似于函数的方式返回。

In other words, turn this class that gives me the error AssertionError: DataFrame Expected type <class 'pandas.core.frame.DataFrame'>, found <class 'NoneType'> instead :换句话说,打开这个给我错误AssertionError: DataFrame Expected type <class 'pandas.core.frame.DataFrame'>, found <class 'NoneType'> instead

minimum example: class that is meant to return dataframe最小示例:旨在返回数据帧的类

import pandas as pd
from pandas.testing import assert_frame_equal

class SumAllClassTwo:
    ''' class sums class_2 to class_2.5 columns then writes it to class_2'''
    
    def __init__(self, df:pd.DataFrame):
        self.df = df

    def sum_all_class_two(self):
        self.df['class_2'] = self.df['class_2'] + self.df['class_2.5'] # sum 2 and 2.5
        self.df = self.df.drop(columns=['class_2.5']) # return new 2
        return self.df
  
class TestSumAllClassTwo:

    def test_one():
        input_df = pd.DataFrame({'class_2':[1], 'class_2.5':[1]})
        result = SumAllClassTwo(input_df) # don't want df as an attribute
        expected = pd.DataFrame({'class_2':[2]})
        assert_frame_equal(result, expected)


# run test class
TestSumAllClassTwo.test_one()

so that it returns a dataframe as the similar method, which is working as intended, would:以便它返回一个数据框,作为按预期工作的类似方法,将:

working method equivalent等效工作方法

def sum_all_class_two_2(df:pd.DataFrame=None):
    df['class_2'] = df['class_2'] + df['class_2.5'] # sum 2 and 2.5
    df = df.drop(columns=['class_2.5']) # return new 2
    return df


def test_sum_all_class_two_2():
    expected =  pd.DataFrame({'class_2':[2]})
    input_df = pd.DataFrame({'class_2':[1], 'class_2.5':[1]})
    result = sum_all_class_two_2(input_df)
    assert_frame_equal(expected, result)

returning a 2 in class 2 by summing the values in row 1 of class_2 and class_2.5 .通过将class_2class_2.5的第 1 行中的值相加,返回第 2 类中的 2。

Mostly not an answer but a comment with more room -主要不是答案,而是有更多空间的评论-

This is the constructor and doesn't return a DF it returns a class reference:这是构造函数并且不返回 DF 它返回一个类引用:

result = SumAllClassTwo(input_df)  

this seems to work:这似乎有效:

result = SumAllClassTwo(input_df).sum_all_class_two()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 没有为对象类型命名为 1 的轴<class 'pandas.core.frame.DataFrame'> - No axis named 1 for object type <class 'pandas.core.frame.DataFrame'> ValueError:带有a的填充值无效<class 'pandas.core.frame.DataFrame'> - ValueError: invalid fill value with a <class 'pandas.core.frame.DataFrame'> 来自 TF 的 Keras:损失为 NaN 并且无法找到可以处理输入的数据适配器:<class 'pandas.core.frame.dataframe'> ,<class 'nonetype'></class></class> - Keras from TF : loss is NaN and Failed to find data adapter that can handle input: <class 'pandas.core.frame.DataFrame'>, <class 'NoneType'> Jupyter Notebook:无效的文件路径或缓冲区 object 类型:<class 'pandas.core.frame.dataframe'> Python</class> - Jupyter Notebook: Invalid file path or buffer object type: <class 'pandas.core.frame.DataFrame'> Python ValueError:对象类型没有名为node2的轴<class 'pandas.core.frame.DataFrame'> - ValueError: No axis named node2 for object type <class 'pandas.core.frame.DataFrame'> ValueError:对象类型没有名为userID的轴 - ValueError: No axis named userID for object type <class 'pandas.core.frame.DataFrame' Pyspark,先知,pandas UDF - [8906 行 x 3 列] 类型<class 'pandas.core.frame.dataframe'> . 对于列文字,使用 '</class> - Pyspark, prophet, pandas UDF - [8906 rows x 3 columns] of type <class 'pandas.core.frame.DataFrame'>. For column literals, use ' Python 脚本中的 RPY2 错误! (未为类型为“的对象定义转换‘py2rpy’<class 'pandas.core.frame.dataframe'> ')</class> - RPY2 error in Python script! (Conversion 'py2rpy' not defined for objects of type '<class 'pandas.core.frame.DataFrame'>') 使用 ExcelFile() 时出现 ValueError: Invalid file path or buffer object 类型:<class 'pandas.core.frame.dataframe'></class> - While using ExcelFile() I am getting ValueError: Invalid file path or buffer object type: <class 'pandas.core.frame.DataFrame'> 更新:命令行错误:ValueError:无效的文件路径或缓冲区 object 类型:<class 'pandas.core.frame.dataframe'></class> - UPDATE: Error in command line: ValueError: Invalid file path or buffer object type: <class 'pandas.core.frame.DataFrame'>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM