2017-06-19 18 views
2

私はpandasデータフレームを使用しています。オレンジ色のデータテーブルに変換して欠損値を代入したいと考えています。 整数type.valueこのポイントを浮遊している私のデータフレームは、ランクが1と5.Typeは、種類の店、店舗などと評価してカテゴリでの間の値を繰り返すと序であるpandasデータフレームをオレンジデータテーブルに変換する

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

のように見えますがされています。 私はそれをオレンジ色のデータテーブルに変換して欠損値を掛けたいと思っています。 私もthisを見たことがありますが、これらの機能は私にエラーを与え、私のために働いていません。

答えて

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(DATAFRAME)

関連する問題