2017-03-29 77 views
0

確定,所以我需要輸入文件的格式如下車削列表或陣列的列表轉換成n×n個二進制矩陣

5 5 12 
1 1 
1 2 
2 1 
2 3 
3 1 
3 2 
3 4 
4 2 
4 4 
1 2 
2 3 
5 5 

,然後把它變成在左手列表示顧客ID的矩陣的計算而右欄是項目ID。

我可以得到Python導入數據,但我努力操縱它,以我需要的方式。

和例子我怎麼需要的數據是:

  Item 1 Item 2 Item 3 
Customer1: 1  2  0  
Customer2: 1  0  2 

這裏是我用來導入數據的方法:

def DataImport(filename): 

    Data = [] 
    with open(filename) as f: 
     for line in f: 
      Data.append([int(v) for v in line.split()]) 
    return Data 

(不完全)

def ImportData(filename): 
    if filename == "history.txt": 
     Option1 = np.loadtxt(filename, skiprows=1) 
     CustomerID = np.loadtxt(filename, skiprows=1, usecols=(0,)) 
     ItemID = np.loadtxt(filename, skiprows=1, usecols=(1,)) 
     print(CustomerID) 
     print(ItemID) 
     print(Option1) 
     Option11 = [] 
     for i in Option1: 
      if i[i][0] == i[0]: 
       Option11.append(i[0][1]) 
     print(Option11) 
    else: 
     Data = np.loadtxt(filename) 

def ImportData(filename): 
    rawdata = {} 
    File = open(filename, "r") 

    for line in File: 
     rawdata[len(rawdata)+1] = line.rstrip("\n") 
    File.close() 
    print(rawdata) 

def ImportData2(filename): 
    with open(filename, newline='') as file: 
     reader = csv.reader(file, delimiter=' ') 
     next(reader) 
     TRvalues = dict(reader) 
    print(TRvalues) 

我認爲numpy方法以最簡單的方式呈現,但我不確定如何讓Python到itter以customerID作爲關鍵字,然後以前面提到的方式添加值。

我不確定我是否已經解釋得很好,但如果您需要更多說明,我可以回答問題。

+1

你的例子的第一行有'5 5 12',其餘的只有兩個條目。一般來說,你是否想要'Item 1 Item 2 Item 3',因爲第一行有三個條目?然後剩餘的項目3會有'0'?您的示例輸入需要更清楚地鏈接到所需的輸出。這是不明顯的,你在找什麼。 – dawg

+0

我*認爲*您正在尋找輸入行中不存在列的默認值? – dawg

+0

第一行是不同的數據,對不起,我忘了提及,這是第一行之後的所有內容。 – Lakura225

回答

0

原則上我強烈建議使用類似大熊貓(http://pandas.pydata.org/pandas-docs/stable/io.html),尤其是

pandas.read_tabel 

將產生大熊貓的數據幀,只要你喜歡,你可以操縱。 但是,如果你不喜歡,你也可以僅僅通過列,而不是行迭代只需使用

for row in matrix.T: 
    instructions for rows... 

而不是

for col in matrix: 
    instructions for columns... 

希望它幫助。