我有一个类myClass,我希望也添加几个数据帧。首先,该类需要一个名称,以及要创建的实例的文件路径列表:
class myClass:
def __init__(self, name, filepathlist):
self.name = name
self.filepathlist = filepathlist
拉入实例的数据不是所需的格式。因此,我创建了一个类的方法来格式化数据,并为每个读取的文件创建类的属性:
def formatData(self):
i = 0
if i < (len(self.filepathlist) - 1):
DFRAW = pd.read_csv(self.filepathlist[i], header = 9) #Row 9 is the row that is not blank (all blank auto-skipped)
DFRAW['DateTime'], DFRAW['dummycol1'] = DFRAW[' ;W;W;W;W'].str.split(';', 1).str
DFRAW['Col1'], DFRAW['dummycol2'] = DFRAW['dummycol1'].str.split(';', 1).str
DFRAW['Col2'], DFRAW['dummycol3'] = DFRAW['dummycol2'].str.split(';', 1).str
DFRAW['Col3'], DFRAW['Col4'] = DFRAW['dummycol3'].str.split(';', 1).str
DFRAW= DFRAW.drop([' ;W;W;W;W', 'dummycol1', 'dummycol2', 'dummycol3'], axis = 1)
#There appears to be an issue with these two lines.
processedfilename = "MYDFNAME" + str(i)
self.processedfilename = DFRAW
i = i + 1
我已经运行了代码的格式化行,那些以DRAW开头的类,在类之外,并且相信它们正常工作。
在脚本的某处,将数据帧指定为类的属性存在问题;我创建了一个文件路径列表和一个类的实例:
filepathlist = [r"file1.csv",r"file2.csv"]
myINST = myClass("MyInstName", filepathlist )
然后运行格式化方法:
myINST.formatData()
现在运行以下命令检查类的实例myINST是否正确分配了属性;
vars(myINST)
但是这会返回文件路径列表,名称以及来自数据帧的大约8000行数据行。我期待以下内容:
filepathlist,name,MYDFNAME0,MYDFNAME1
我的代码或方法中的错误是什么?
vars
将返回一个实例的所有值,因为myClass
有三个值:name
,filepathlist
和processedfilename
(它应该是一个数据帧),所以它将返回所有值。
如果您只需要文件路径列表,则可以通过instance_object.field_name
访问它。
myINST.filepathlist
,这将返回[r"file1.csv",r"file2.csv"]
。
此外,你可能在这里做得不正确:
processedfilename = "MYDFNAME" + str(i)
self.processedfilename = DFRAW
i = i + 1
(1)您将数据框对象存储在名为processedfilename
的字段中,这很奇怪。 (2)你没有附加值而是替换,因此在循环之后,这将只返回filepathlist
中的最新数据框。
您应该以更好的格式存储数据框:列表,字典等。
实际上,如果将其合并到vars()
方法中,您可以访问__init__
中的数据框。下面构建一个数据帧字典,其中键是原始csv文件名。
class myClass:
def __init__(self, name, filepathlist):
self.name = name
self.filepathlist = filepathlist
self.mydataframedict = self.formatData()
def formatData(self):
tmp_dict = {}
for f in self.filepathlist:
DFRAW = pd.read_csv(f, header = 9)
DFRAW['DateTime'], DFRAW['dummycol1'] = DFRAW[' ;W;W;W;W'].str.split(';', 1).str
DFRAW['Col1'], DFRAW['dummycol2'] = DFRAW['dummycol1'].str.split(';', 1).str
DFRAW['Col2'], DFRAW['dummycol3'] = DFRAW['dummycol2'].str.split(';', 1).str
DFRAW['Col3'], DFRAW['Col4'] = DFRAW['dummycol3'].str.split(';', 1).str
DFRAW = DFRAW.drop([' ;W;W;W;W', 'dummycol1', 'dummycol2', 'dummycol3'], axis = 1)
tmp_dict[f] = DFRAW
return tmp_dict
filepathlist = [r"file1.csv", r"file2.csv"]
myINST = myClass("MyInstName", filepathlist )
new_dict = myINST.formatData() # LOCAL VARIABLE (ALSO ACCESSIBLE IN VARS)
print(vars(myINST))
# {'name': 'MyInstName', 'mydataframedict': {'file1.csv': ..., 'file2.csv': ...},
# 'filepathlist': ['file1.csv', 'file2.csv']}