2016-12-13 141 views
2

我需要酸洗即形式的數據:具有酸洗數據

元組的列表,列表

例如多個行的表[(1,2),(2,3),(3,4)]與[1,2,3]相關聯

我無法找到一種方法來清理數據並加載它,以便我得到:

import cPickle 
f = open("data.pkl", 'rb') 
X,Y = cPickle.load(f) 

這樣X只有第一列數據而Y有第二列。

我在想分開存儲第一列和第二列,但是我怎麼能在一個語句中加載這樣的數據?

a = [] 
a.append([(1,2),(2,3)]) 

並且類似地用於第二列。

b = [] 
b.append([1,2]) 

那麼如何去除它並取下它呢?

非常感謝。

+0

你試過'Bunch'類? – Roxanne

回答

1
class Bunch(dict): 
    """Container object for datasets 
    Dictionary-like object that exposes its keys as attributes. 
    >>> b = Bunch(a=1, b=2) 
    >>> b['b'] 
    2 
    >>> b.b 
    2 
    >>> b.a = 3 
    >>> b['a'] 
    3 
    >>> b.c = 6 
    >>> b['c'] 
    6 
    """ 

    def __init__(self, **kwargs): 
     super(Bunch, self).__init__(kwargs) 

    def __setattr__(self, key, value): 
     self[key] = value 

    def __dir__(self): 
     return self.keys() 

    def __getattr__(self, key): 
     try: 
      return self[key] 
     except KeyError: 
      raise AttributeError(key) 

import cPickle as pickle 

dataset = Bunch.Bunch(data=X, target=Y, 
         target_names=target_names_input, 
         DESCR=fdescr,feature_names=labels_names) 

def save_object(obj, filename): 
with open(filename, 'wb') as output: 
    pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL) 

save_object(dataset,'data.pkl') 

with open('data.pkl', "rb") as f: 
data = pickle.load(f) 
X = data.data 
Y = data.target 

我以爲你有某種形式的特徵數據在表X的行和你的列Y是目標向量。

+0

謝謝,是X是特徵數據,y是目標矢量。我沒有得到你如何在這裏儲蓄和酸洗。 – Rafael

+0

@Rafael如果這個答案解決了您的問題,您可以通過將其標記爲已接受:)來表達您的感謝。 – Roxanne

+0

當然,我會將其標記爲已接受。在這裏,首先我需要在文件中保存x和y(假設x和y都是列表)。然後在一個泡菜文件中。我的困惑是整個文件的格式如何保存。在這裏,我看不到數據如何存儲在文件中。 – Rafael

1

嘗試

import cPickle 

FILENAME = 'foo.pkl' 

X = [(1,2),(2,3),(3,4)] 
Y = [1,2,3] 

with open(FILENAME, 'wb') as f: 
    cPickle.dump((X, Y), f) 

with open(FILENAME, 'rb') as f: 
    x, y = cPickle.load(f) 

print(x) 
print(y) 
+0

你是否打開('data2.pkl',「rb」)作爲f: \t \t \t pickle.dump((X,Y),f)。請給出一個簡單的傾銷和加載X Y的例子,我可以運行。非常感謝。 – Rafael

+0

@Rafael好吧,我改進了這篇文章在mcve。 – Gribouillis

+0

非常感謝。它工作正常。 – Rafael