2014-04-16 26 views
2

我有一個熊貓數據框,其中一列包含字符串數組作爲每個元素。在pandas/python中,讀取數組存儲爲字符串

所以像這樣的東西。

col1 col2 
0 120 ['abc', 'def'] 
1 130 ['ghi', 'klm'] 

現在,當我使用to_csv將此存儲到csv時,它似乎很好。 當我使用from_csv讀回來時,我似乎回頭看了一遍。 但是當我分析每個單元格中的值時,數組是

'['''''a''b''c'等等。 所以基本上它不會將它讀作一個數組,而是一組字符串。有人可以建議我如何將這個字符串轉換爲數組?

我的意思是說數組已經存儲像繩子

'[\'abc\',\'def\']' 

回答

6

正如在其他問題中提到,你應該在這裏使用literal_eval

from ast import literal_eval 
df['col2'] = df['col2'].apply(literal_eval) 

在行動:

In [11]: df = pd.DataFrame([[120, '[\'abc\',\'def\']'], [130, '[\'ghi\',\'klm\']']], columns=['A', 'B']) 

In [12]: df 
Out[12]: 
    A    B 
0 120 ['abc','def'] 
1 130 ['ghi','klm'] 

In [13]: df.loc[0, 'B']  # a string 
Out[13]: "['abc','def']" 

In [14]: df.B = df.B.apply(literal_eval) 

In [15]: df.loc[0, 'B'] # now it's a list 
Out[15]: ['abc', 'def'] 
0

也許嘗試使用不同的分隔值?像這樣:

DataFrame.to_csv(filepath, sep=';') 

,然後用

DataFrame.from_csv(filepath, sep=';') 
1

沒關係得到它讀。

所有我要做的就是

arr = s[1:-1].split(',') 

這擺脫了方括號,並分割字符串到一個數組像我想要的。

1

沒有大熊貓,這是用來做這件事的ast模塊literal_eval()

>>> data = "['abc', 'def']" 
>>> import ast 
>>> a_list = ast.literal_eval(data) 
>>> type(a_list) 
<class 'list'> 
>>> a_list[0] 
'abc' 
+0

隨着熊貓,你也應該使用'literal_eval'! –

+0

@AndyHayden啊好的!從來沒有用過熊貓,不知道:) – shaktimaan

+0

這是更多我想要的。 – AMM

相關問題