将 pandas 数据帧转换为橙色数据 table

convert pandas dataframe to Orange data table

我正在处理 pandas 数据框,我想将其转换为橙色数据 table 以估算缺失值。 我的数据框看起来像

locationId rank Rating type  value
1          1    10     shop   2.668
2          4    8      store  3.921
3          3    NAN    shop   3.122

其中 rank 是有序的,重复值在 1 到 5.Type 之间,是商店、商店等类型的分类,评级是整数 type.value 是浮点数。 我想将其转换为橙色数据 table 并估算缺失值。 我也查看了 this,但这些函数给我一个错误,对我不起作用。

import numpy as np
import pandas as pd
import Orange
import csv
from io import StringIO
from collections import OrderedDict
from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable


def pandas_to_orange(df):
    domain, attributes, metas = construct_domain(df)
    orange_table = Orange.data.Table.from_numpy(domain = domain, X = df[attributes].values, Y = None, metas = df[metas].values, W = None)
    return orange_table

def construct_domain(df):
    columns = OrderedDict(df.dtypes)
    attributes = OrderedDict()
    metas = OrderedDict()
    for name, dtype in columns.items():

        if issubclass(dtype.type, np.number):
            if len(df[name].unique()) >= 13 or issubclass(dtype.type, np.inexact) or (df[name].max() > len(df[name].unique())):
                attributes[name] = Orange.data.ContinuousVariable(name)
            else:
                df[name] = df[name].astype(str)
                attributes[name] = Orange.data.DiscreteVariable(name, values = sorted(df[name].unique().tolist()))
        else:
            metas[name] = Orange.data.StringVariable(name)

    domain = Orange.data.Domain(attributes = attributes.values(), metas = metas.values())

    return domain, list(attributes.keys()), list(metas.keys())

使用 -> pandas_to_orange(dataFrame)