将pandas dataframe转换为Orange数据表

时间:2017-06-19 08:58:49

标签: python missing-data orange

我正在使用pandas数据帧,我希望将其转换为橙色数据表来估算缺失值。 我的数据框看起来像

{{1}}

其中rank是序数,重复值介于1和5之间.Type类型为shop,store等类型,rating是整数类型.value是浮点数。 我想将其转换为橙色数据表并估算缺失值。 我也查看了this,但这些函数给了我一个错误,但对我没用。

1 个答案:

答案 0 :(得分:1)

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(数据帧)