【发布时间】:2021-10-22 23:42:56
【问题描述】:
我正在玩python,并试图制作一个简单的数据清理程序。我正在尝试将title 值从read_excel 模块传递给output 模块。但是,它一直说名字title is not defined。这是我的代码:
import os
import pandas as pd
import math
class Item():
__name = ""
__cost = 0
__gender = ""
__prime = ""
def has_all_properties(self):
return bool(self.__name and not math.isnan(self.__cost) and self.__gender and self.__prime)
def clean(self,wanted_cost,wanted_gender,wanted_prime):
return bool(self.__name and self.__gender == wanted_gender and self.__cost <= wanted_cost and self.__prime == wanted_prime)
def __init__(self, name, cost, gender, prime):
self.__name = name
self.__cost = cost
self.__gender = gender
self.__prime = prime
def __eq__(self, other):
return (self.__name == other.__name and self.__cost == other.__cost and self.__gender == other.__gender and self.__prime == other.__prime)
def __hash__(self):
return hash((self.__name, self.__cost, self.__gender, self.__prime))
def __repr__(self):
return f"Item({self.__name},{self.__cost},{self.__gender},{self.__prime})"
def tuple(self):
return self.__name, self.__cost, self.__gender, self.__prime
def read_excel(filetype):
cwd = os.path.abspath('')
files = os.listdir(cwd)
df = pd.DataFrame()
for file in files:
if file.endswith(filetype):
df = df.append(pd.read_excel(file), ignore_index=True)
df = df.where(df.notnull(), None)
df = df[['name', 'cost', 'used_by', 'prime']]
title = list(df.columns.values)
print(title)
array = df.values.tolist()
print(array)
return array
return output(title)
def process(array):
mylist = {Item(*k) for k in array}
print(mylist)
filtered = {obj for obj in mylist if obj.has_all_properties()}
clean = {obj for obj in filtered if obj.clean(20,"male","yes")}
result = list(clean)
print(result)
def output(where, sort_data, title):
t_list = [obj.tuple() for obj in sort_data]
output = pd.DataFrame(t_list, columns = title)
output.to_excel(where, index = False, header = True)
if __name__ == "__main__":
inputfile = read_excel('.XLSX')
processdata = process(inputfile)
result = output('clean_data.xlsx', processdata, title)
你能告诉我该怎么做吗?谢谢你的帮助
【问题讨论】:
-
您不能连续有两个
return语句。第一个退出函数,第二个永远不会执行。如果要从函数返回两个值,请执行return array, output(title) -
但是
output()不返回任何内容,它只是写入Excel 文件,那么您希望return output(title)做什么? -
@Barmar,感谢您的澄清。我要返回的是熊猫数据框的标题列表(我称其为标题以避免混淆),即['name','cost','used_by','prime']。我希望将此列表返回到输出定义,以便输出 excel 将具有相同的标题。
-
return output在函数中。另外,避免对变量和函数使用相同的名称。 -
@Barmar 谢谢。你介意给我这行代码吗?
标签: python function return definition