[英]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_2
和class_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.