簡體   English   中英

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

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

如何更改一個類以強制它返回一個 pandas 數據幀,而不是作為一個對象,而是以類似於函數的方式返回。

換句話說,打開這個給我錯誤AssertionError: DataFrame Expected type <class 'pandas.core.frame.DataFrame'>, found <class 'NoneType'> instead

最小示例:旨在返回數據幀的類

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()

以便它返回一個數據框,作為按預期工作的類似方法,將:

等效工作方法

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)

通過將class_2class_2.5的第 1 行中的值相加,返回第 2 類中的 2。

主要不是答案,而是有更多空間的評論-

這是構造函數並且不返回 DF 它返回一個類引用:

result = SumAllClassTwo(input_df)  

這似乎有效:

result = SumAllClassTwo(input_df).sum_all_class_two()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM