我正在尝试熊猫。我正在尝试创建一个简单的对象,该对象代表我要使用的数据。为此,我已经编写了下面的代码来创建对象,但是我得到了:
TypeError:test_df()缺少1个必需的位置参数:'self
第13行。我无法弄清楚自己在做什么。也许我没有得到关于类声明的一些概念性信息。非常感谢您的帮助。
import pandas as pd
class ICBC():
def __init__(self, name, path):
self.name = name
self.df = pd.read_csv(path)
def test_df(self):
print(self.df.info)
mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
ICBC.test_df() <- This is line 13
答案 0 :(得分:5)
一旦创建了类的实例(使用ICBC(...)
),就需要在 instance 而不是 class上调用test_df
方法本身。
更改代码,以使mov
被称为test_df()
:
import pandas as pd
class ICBC():
def __init__(self, name, path):
self.name = name
self.df = pd.read_csv(path)
def test_df(self):
print(self.df.info)
mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
mov.test_df()
要进一步弄清错误告诉您的内容:当您在Python中的实例上调用方法时,会自动传递一个self
参数。但是,ICBC
不是实例,因此不会传递self
。这会导致您看到参数错误。
此行为意味着您还可以执行以下操作来调用方法:
ICBC.test_df(mov)
但是,没有人这样做:它不被认为是一种好习惯,因为它会使代码更长且更难阅读。
答案 1 :(得分:3)
使用:
mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
mov.test_df()
代替
ICBC.test_df()
test_df是一个实例方法,因此您需要一个实例来访问它。您的问题是您试图访问该方法,因为它是一个类方法
答案 2 :(得分:1)
test_df
是一个实例方法;您需要在ICBC
的实例上调用它,而不是在ICBC
本身上调用它。也许您打算写mov.test_df()
?