保存并从CSV中读取Python字典

时间:2016-11-11 00:45:06

标签: python csv pandas numpy dictionary

我想执行一个简单的操作,将python字典存储到csv文件中,然后将其作为字典从文件中读取。

我的字典将字符串映射到numpy数组列表,例如:

d = {'x': [array([2, 3, 4]), array([5, 6, 7])], 'y': [array([1, 2, 3]), array([4, 5, 6])]

所以我想将这个字典存储为csv,然后在另一个程序中从该文件重新创建字典。

我尝试使用python的csv模块将字典写入csv文件,但无法正确存储多维numpy数组列表。当我使用模块将其读回时,它会读回csv文件中的空白行。

我也尝试使用pandas,但无法弄清楚如何使用read_csv()方法从字典中读取numpy数组列表。

1 个答案:

答案 0 :(得分:2)

In [610]: d = {'x': [np.array([2, 3, 4]), np.array([5, 6, 7])], 'y': [np.array(
     ...: [1, 2, 3]), np.array([4, 5, 6])]}
In [611]: d
Out[611]: 
{'x': [array([2, 3, 4]), array([5, 6, 7])],
 'y': [array([1, 2, 3]), array([4, 5, 6])]}

In [613]: np.save('test.npy',d)
In [614]: np.load('test.npy')
Out[614]: array({'x': [array([2, 3, 4]), array([5, 6, 7])], 'y': [array([1, 2, 3]), array([4, 5, 6])]}, dtype=object)

因此,在字典上调用save,它将字典包装在对象类型数组中,然后保存它。并且使用它们各自的pickle方法保存对象数组的元素。因此它会腌制字典和字典中的列表。最后,列表中的数组以np.save的版本进行了腌制。很多筑巢。但它确实有效。

并且item可用于将字典拉出对象数组:

In [616]: dd=np.load('test.npy').item()
In [617]: dd
Out[617]: 
{'x': [array([2, 3, 4]), array([5, 6, 7])],
 'y': [array([1, 2, 3]), array([4, 5, 6])]}

直接使用pickle

In [626]: pickle.dump(d, open('test.pkl','wb'))
In [627]: np.load('test.pkl')
Out[627]: 
{'x': [array([2, 3, 4]), array([5, 6, 7])],
 'y': [array([1, 2, 3]), array([4, 5, 6])]}
In [629]: pickle.load(open('test.pkl','rb'))
Out[629]: 
{'x': [array([2, 3, 4]), array([5, 6, 7])],
 'y': [array([1, 2, 3]), array([4, 5, 6])]}

要从此词典中写一个csv,我要创建一个结构化数组,其中的字段名为' x'和'。但我认为我必须连接数组,所以我可以生成一个1d数组。然后csv看起来像:

x    y
2    1
3    4
....

或者如果子阵列长度相同,我可以生成

x    y
2 5  1 4
3 6  2 5
...

如果您仍想使用csv路线,则需要决定如何将值表示为简单的列线。