【发布时间】:2021-08-22 03:23:41
【问题描述】:
所以我使用python通过类函数从excel制作了一个自定义数据框,这是我当前的代码:
import os
import pandas as pd
import math
cwd = os.path.abspath('')
files = os.listdir(cwd)
df = pd.DataFrame()
for file in files:
if file.endswith('.XLSX'):
df = df.append(pd.read_excel(file), ignore_index=True)
df = df = df[['name', 'cost', 'used_by', 'prime']]
header = list(df.columns.values)
print(header)
df = df.where(df.notnull(), None)
array = df.values.tolist()
print(array)
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
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)
t_list = [obj.tuple() for obj in result]
output = pd.DataFrame(t_list, columns = header)
output.to_excel('clean_data.xlsx', index = False, header = True)
我从中导入的 excel 看起来像这样:
product cost used_by prime
name price gender yes or no
name price gender yes or no
... and so on
Class Item 制作的数据框看起来像这样:
mylist = {Item(UNO,15.0,None,None),
Item(pen,5.0,female,yes),
Item(underwear,15.0,male,yes),
Item(google,25.0,male,no),
Item(mug,58.0,male,no),
Item(None,10.0,female,no),
... and so on}
我想要的是class 中的def 能够调用一列数据。
所以,我认为它看起来像这样:
def get_value(self,title):
this is the code
当我调用诸如get_value(product) 之类的列时,我将得到一个仅包含所有产品名称的列表,女巫应该看起来像这样:
list = [UNO、钢笔、内衣、谷歌、马克杯、无……等等]
如果class 有一个内置函数可以做到这一点,我想看看。
你能给我一些建议吗,提前谢谢你。
【问题讨论】:
标签: python list dataframe class-method