2016-10-21 4 views
1

У меня есть несколько каталогов с файлами внутри (индекс), каждая папка имеет состояние. Я хочу перебрать все файлы из каталога, создать foreach 2D-гистограмму и собрать все вместе в одном объекте с возможностью выбора строк на основе состояния.Импорт данных (изменить, numpy, pandas)

Например (с 3x3 2D-гистограмме):

"Filename" , "State", "X_1", "X_2", "X_3", "X_4", "X_5", "X_6", "X_7", "X_8","X_9" 

"File_1.csv", "FOO",0,0,1,2,3,0,0,0,0 
"File_2.csv", "FOO",0,0,1,2,3,1,1,0,0 
"File_3.csv", "FOO",0,0,4,5,3,0,0,0,0 
"File_4.csv", "BAr",0,0,1,2,3,0,0,0,0 
"File_5.csv", "BAR",0,0,1,2,3,1,1,0,0 
"File_6.csv", "BAR",0,0,4,5,3,0,0,0,0 

я сделал:

def read(path, b, State): 
     HistList = [] 
     HistName = [] 
     files = os.listdir(path) 

     for i in range(0, len(files)): 
      .... 
      hist,xe,ye = np.histogram2d(X, Y, bins=b, normed=True) 
      HistList.append(hist.flatten()) 
      NameList.append(files[i]) 

    return DataFrame(???) 
+0

Может быть, я не понял вопрос, но не 'Mat.append (ч)' (сразу после последней строки в цикле) решить эту проблему? Какова форма конечной матрицы? – Yugi

ответ

0

Почему не использует словарь?

Вы можете создать Final_Dict{}, чтобы передать его функции в качестве аргумента, и функция будет постепенно заполнять этот словарь для каждой папки и ее файлов. В этом словаре основные ключи представляют собой папку (Final_Dict[folder_name]). Затем суб-ключи этого основного ключа предназначены для имен файлов этой конкретной папки (Final_Dict[folder_name][file_name]), и, наконец, значение этой под-клавиши является гистограммой.

Просто чтобы быть ясно, следующая строка извлекает имя папки из пути:

current_folder = os.path.basename(os.path.normpath(path)) 

Код (не проверено):

def read(Final_Dict, path, b, para): 
     current_folder = os.path.basename(os.path.normpath(path)) 
     Final_Dict[current_folder] = {} 

     files = os.listdir(path) 
     for i in range(0, len(files)): 
      .... 
      hist,xe,ye = np.histogram2d(X, Y, bins=b, normed=True) 
      Final_Dict[current_folder][files[i]] = hist.flatten() 

    return Final_Dict 

Final_Dict = {} 
b = ... 
para = ... 
for folder_path in folder_path_list: 
     Final_Dict = read(Final_Dict, folder_path, b, para) 

После этого вы можете преобразовать Final_Dict к данным рама:

Final_Dataframe = pd.DataFrame.from_dict(Final_Dict, orient='index', dtype=None) 

быстрый пример преобразования:

import numpy as np 
import pandas as pd 

Final_Dict= {} 
Final_Dict['state1'] = {} 
Final_Dict['state2'] = {} 

Final_Dict['state1']['file1'] = [1,2,3] 
Final_Dict['state1']['file2'] = [9,9,9] 
Final_Dict['state2']['file1'] = [3,3,3] 
Final_Dict['state2']['file2'] = [7,6,5] 

FInal_Dataframe = pd.DataFrame.from_dict(Final_Dict, orient='index', dtype=None) 

print "whole dataframe:" 
print FInal_Dataframe 

print "\n\n\nSelecting folder 2: " 
print FInal_Dataframe.loc['state2'] 

результат:

whole dataframe: 
      file2  file1 
state1 [9, 9, 9] [1, 2, 3] 
state2 [7, 6, 5] [3, 3, 3] 



Selecting folder 2: 
file2 [7, 6, 5] 
file1 [3, 3, 3] 
Name: state2, dtype: object 
+0

в моем случае [1,2,3] - это многоуровневый массив формы (56,10,10) - существует ли способ ввода каждой записи с именем «X_i» в качестве столбца? – Roby

+0

Не понимаю. Теперь столбцы являются именами файлов, вам не нужны? Объясните более ясно – Yugi

+0

см. Мои вопросы – Roby

Смежные вопросы