【问题标题】:Pickling Data of Custom Format自定义格式的酸洗数据
【发布时间】:2016-12-13 13:37:38
【问题描述】:

我需要腌制以下形式的数据:包含多行的表格

元组列表,一个列表

例如[(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])

那如何腌制和解封呢?

非常感谢。

【问题讨论】:

  • 你试过Bunch类吗?

标签: python python-2.7 pickle


【解决方案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 是目标向量。

【讨论】:

  • 谢谢,是的,X 是特征数据,y 是目标向量。我不明白你是如何先保存然后在这里腌制的。
  • @Rafael 如果此答案解决了您的问题,您可以通过将其标记为已接受来表示感谢:)
  • 当然,我会将其标记为已接受。在这里,首先我需要将 x 和 y 保存在一个文件中(假设 x 和 y 都是列表)。然后在泡菜文件中。我的困惑是如何在文件中保留格式。在这里,我看不到数据是如何存储在文件中的。
  • 嗨,我无法使用示例数据:X = [(1,2), (2,3)] Y = [1,2]。
【解决方案2】:

试试

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)

【讨论】:

  • 你的意思是 open('data2.pkl', "rb") as f: pickle.dump((X, Y), f) 。请举一个我可以运行的转储和加载 X Y 的简单示例。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2017-10-26
  • 2011-05-08
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多