2016-03-02 66 views
1

我指的是this問題,因爲我在從.csv文件讀取同一數據幀之前和之後遇到列類型奇怪的行爲。從開始:熊貓 - 閱讀文件之前/之後的不同dtype列

In [137]: df 
Out[137]: 
    node1 node2 lang w c1 c2 
0  1  2 it 1 a a 
1  1  2 en 1 a a 
2  2  3 es 2 a b 
3  3  4 it 1 b b 
4  5  6 it 1 c c 
5  3  5 tg 1 b c 
6  1  7 it 1 a a 
7  7  1 es 1 a a 
8  3  8 es 1 b b 
9  8  4 es 1 b b 
10  1  9 it 1 a a 

然後執行GROUPBY:

In [138]: g = df.groupby(['c1','c2'])['lang'].unique().reset_index() 

In [139]: g 
Out[139]: 
    c1 c2   lang 
0 a a [it, en, es] 
1 a b   [es] 
2 b b  [it, es] 
3 b c   [tg] 
4 c c   [it] 

,並獲得lang列返回的值:

In [148]: g['lang'].values 
Out[148]: 
array([array(['it', 'en', 'es'], dtype=object), 
     array(['es'], dtype=object), array(['it', 'es'], dtype=object), 
     array(['tg'], dtype=object), array(['it'], dtype=object)], dtype=object) 

然後,如果我:

In [141]: g.to_csv('g.csv',index=False) 

In [142]: g = pd.read_csv('g.csv') 

In [143]: g 
Out[143]: 
    c1 c2    lang 
0 a a ['it' 'en' 'es'] 
1 a b   ['es'] 
2 b b  ['it' 'es'] 
3 b c   ['tg'] 
4 c c   ['it'] 

In [145]: g['lang'].values 
Out[145]: array(["['it' 'en' 'es']", "['es']", "['it' 'es']", "['tg']", "['it']"], dtype=object) 

所以讀t他從.csv文件導致了一個字符串數組,在寫入/讀取數據幀之前,它比原始數組數組處理起來要複雜得多。任何人都知道在從文件讀取數據幀後是否有辦法保持相同的格式?

回答

2

您可能需要使用pickle IO

import pandas as pd 
df = pd.DataFrame({'a': [['a', 'b']]}) 
df.a.dtype 
df.to_pickle('stuff.pkl.bin') 
>>> pd.read_pickle('stuff.pkl.bin').a 
0 [a, b] 
Name: a, dtype: object 

CSV是非常有限的,文本格式。相反,pickle (and its variants)是二進制對象格式。