2016-07-05 128 views
1

第一次在這裏發佈。 所以我的問題是關於如何讀取Pandas中的CSV文件,目的是在每個元素內創建一個具有矩陣的2d數組。熊貓:讀取CSV文件的目的是創建3D陣列

因此,例如藉此例如CSV文件

1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3 

當每一個新的行代表一個單獨的矩陣
並且每個分號表示每一矩陣
內的單獨行和每逗號表示內的每個單獨的元件排

從這個

所以我想獲得這種類型的數組:

[ 
    [[1,1,1],[2,2,2],[3,3,3]], 
    [[1,1,1],[2,2,2],[3,3,3]], 
    [[1,1,1],[2,2,2],[3,3,3]] 
] 

當前,當我在這樣的東西上使用pandas.read_csv()時,它不會將分號讀爲分隔符,所以像1; 2這樣的東西會被讀作字符串。

謝謝!

回答

0

您可以使用read_csv和參數sep=';'header=None(如果csv中沒有標題)。然後,你需要apply功能str.split,因爲string功能與Series(的df列)只工作:

import pandas as pd 
import io 

temp=u"""1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep=";", header=None) 
print (df) 
     0  1  2 
0 1,1,1 2,2,2 3,3,3 
1 1,1,1 2,2,2 3,3,3 
2 1,1,1 2,2,2 3,3,3 

print (df.apply(lambda x: x.str.split(','))) 
      0   1   2 
0 [1, 1, 1] [2, 2, 2] [3, 3, 3] 
1 [1, 1, 1] [2, 2, 2] [3, 3, 3] 
2 [1, 1, 1] [2, 2, 2] [3, 3, 3] 

print (df.apply(lambda x: x.str.split(',')).values.tolist()) 
[[['1', '1', '1'], ['2', '2', '2'], ['3', '3', '3']], 
[['1', '1', '1'], ['2', '2', '2'], ['3', '3', '3']], 
[['1', '1', '1'], ['2', '2', '2'], ['3', '3', '3']]] 

但如果int需求清單:

import pandas as pd 
import io 

temp=u"""1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3 
1,1,1;2,2,2;3,3,3""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep=";", header=None) 
print (df) 
     0  1  2 
0 1,1,1 2,2,2 3,3,3 
1 1,1,1 2,2,2 3,3,3 
2 1,1,1 2,2,2 3,3,3 

for col in df.columns: 
    df[col] = df[col].str.split(',') 
    #if need convert string numbers to int 
    df[col] = [[int(y) for y in x] for x in df[col]]  

print (df.values.tolist()) 
[[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[1, 1, 1], [2, 2, 2], [3, 3, 3]]]