【问题标题】:How to extract columns from a customized data frame?如何从自定义数据框中提取列?
【发布时间】: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


【解决方案1】:

试试pandas.Series.unique

示例:

    product     cost    used_by     prime
0   comic       50.55   female      yes
1   paint       14.00   male        no
2   headphone   45.00   female      no
3   phone case  20.23   male        yes
4   pen         66.00   female      no

df['product'].unique()

  >> array(['comic', 'paint', 'headphone', 'phone case', 'pen'], dtype=object)

df['used_by'].unique()

  >> array(['female', 'male'], dtype=object)

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    相关资源
    最近更新 更多