2016-10-21 4 views
1

파일 안에 여러 개의 디렉토리가 있습니다 (색인). 각 디렉토리에는 상태가 있습니다. 디렉터리의 모든 파일을 반복하고 foreach에 2D 히스토그램을 만들고 상태를 기반으로 행을 선택할 수있는 기능을 하나의 개체에 모두 포함하고자합니다.데이터 가져 오기 (reshape, numpy, pandas)

(예를 들어, 3 × 3 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

관련 문제