2016-04-21 114 views
1

我已經使用條件語句(未顯示)從2個輸入文件生成了2個字典。然後,我打算使用這兩本字典來確定重疊值。然後,我想直接使用迭代的輸出作爲熊貓數據框。爲此,我首先將iteration/for循環輸出到一個文件(Output.xls)中,然後將該文件作爲pandas數據框讀取。雖然這很好,但我想知道是否有一種方法可以直接將迭代中的'newline'用作空熊貓數據框的輸入。除了dataFrame.from_dict之外,我找不到Python上的選項。然而,這需要1個字典,但我有多個字典,我正在聯合在一起,以及我正在使用的其他變量。將字典上的迭代轉換爲熊貓數據框

 
exp1_dict.items() is: 
[('lnc3', ['SPATA1', 'AHNAK', 'FGG', 'ERAP1', 'HZ', 'SAASDAS', 'NLRC5', 'HUWE1']), ('lnc2', ['SPATA1', 'FGG', 'TMEM68', 'ATP6AP', 'HUWE1']), ('lnc1', ['SPATA1', 'AHNAK', 'FGG', 'TMEM68', 'ERAP1', 'ATP6AP', 'SAASDAS', 'RAD17', 'HUWE1'])] 

exp2_dict.items() is: 
[('lnc3', ['SPATA1', 'AHNAK', 'TMEM68', 'ERAP1', 'HZ', 'RAD17', 'NLRC5', 'HUWE1']), ('lnc2', ['SPATA1', 'FGG', 'ERAP1', 'HZ']), ('lnc1', ['SPATA1', 'AHNAK', 'FGG', 'TMEM68', 'ERAP1', 'HZ', 'ATP6AP', 'RAD17']), ('lnc4', ['ERAP1', 'PRSS16', 'HZ', 'NLRC5'])] 

遍歷字典,併產生 '換行' 的代碼是:

out.close() 
new_input=pd.read)table("Output.xls", index_col=0) 

代替創建:

out = open("Output.xls", "w") #generates an empty output file 
out.write('Header1\tHeader2\tHeader3\tHeader4\tHeader5\tHeader6\tHeader7\tHeader8\tHeader9\tHeader10\tHeader11\n')#Adds header to output file 

intersection_dict={} #empty intersection header 
for key, value1 in exp1_dict.items(): #reiterates over the 2 dictionaries 
     if key in exp2_dict.keys(): 
       intersection_dict[key]=list(set(value1).intersection(exp2_dict[key])) 
       newline=key, str(f_exp1_dict[key]), str(f_exp2_dict[key]), str('|'.join(value1)), str(len(exp1_dict[key])), str(len(exp1_corr.index)), str('|'.join(exp2_dict[key])), str(len(exp2_dict[key])), str(len(exp2_corr.index)), str('|'.join(intersection_dict[key])), str(len(intersection_dict[key])) 
       out.write('\t'.join(newline)+'\n') 

我然後使用熊貓數據幀讀出的文件Output.xls一個輸出文件然後輸入它作爲一個熊貓數據框,我想知道是否有一種方法來寫一個空的熊貓數據框「空行」上面的頭直接上面。

的Output.xls文件看起來是這樣的:

 
Header1 Header2 Header3 Header4 Header5 Header6 Header7 Header8 Header9 Header10 Header11 
lnc3 4 4 SPATA1|AHNAK|FGG|ERAP1|HZ|SAASDAS|NLRC5|HUWE1 8 12 SPATA1|AHNAK|TMEM68|ERAP1|HZ|RAD17|NLRC5|HUWE1 8 12 HZ|ERAP1|AHNAK|HUWE1|NLRC5|SPATA1 6 
lnc2 2 3 SPATA1|FGG|TMEM68|ATP6AP|HUWE1 5 12 SPATA1|FGG|ERAP1|HZ 4 12 SPATA1|FGG 2 
lnc1 1.5 2 SPATA1|AHNAK|FGG|TMEM68|ERAP1|ATP6AP|SAASDAS|RAD17|HUWE1 9 12 SPATA1|AHNAK|FGG|TMEM68|ERAP1|HZ|ATP6AP|RAD17 8 12 ERAP1|RAD17|AHNAK|TMEM68|ATP6AP|SPATA1|FGG 7 
+0

幾乎可以肯定,有一個簡單的方法可以做到這一點。然而,我很不清楚輸入是什麼樣的。如果問題簡化了,我會更容易幫忙。 – piRSquared

+0

@piRSquared thx評論。我已經添加了上面的字典。我希望有所幫助。 – BioProgram

+0

我認爲這是Python 3?另外,什麼是'f_exp1_dict'和'f_exp2_dict'? – Alexander

回答

1

創建列表然後您可以用它來創建你的數據幀列表:

df = [] 
for key, value1 in exp1_dict.iteritems(): 
    if key in exp2_dict: 
     dict_union = list(set(value1).intersection(exp2_dict[key])) 
     col1 = key 
     col2 = str(f_exp1_dict[key]) 
     col2 = str(f_exp2_dict[key]) 
     col3 = str('|'.join(value1)) 
     col4 = str(len(exp1_dict[key])) 
     col5 = str(len(exp1_corr.index)) 
     col6 = str('|'.join(exp2_dict[key])) 
     col7 = str(len(exp2_dict[key])) 
     col8 = str(len(exp2_corr.index)) 
     col9 = str('|'.join(dict_union)) 
     col10 = str(dict_union) 
     df.append([col1, col2, col3, col4, col5, col6, col7, col8, col9, col10]) 

df = pd.DataFrame(df) 
+0

謝謝你的工作,爲我所用的數據框添加列名:df.columns = ['Header1','Header2'......'Header10'] – BioProgram

1

搞清楚什麼樣亞歷山大帶來了f_exp1_dict所有的失位是耗時和令人沮喪。但是你可能會發現下面的代碼很有用。您必須修改以包含所有其他字符串。

exp1_df = pd.DataFrame([[k, v] for k, v in exp1_dict.items()], columns=['Header1', 'Header4']).set_index('Header1') 
exp2_df = pd.DataFrame([[k, v] for k, v in exp2_dict.items()], columns=['Header1', 'Header7']).set_index('Header1') 

newlines = pd.concat([exp1_df, exp2_df], axis=1).dropna(subset=['Header4']) 

exp1_df看起來像

            Header4 
Header1             
lnc3  [SPATA1, AHNAK, FGG, ERAP1, HZ, SAASDAS, NLRC5... 
lnc2     [SPATA1, FGG, TMEM68, ATP6AP, HUWE1] 
lnc1  [SPATA1, AHNAK, FGG, TMEM68, ERAP1, ATP6AP, SA... 

exp2_df看起來像

            Header7 
Header1             
lnc3  [SPATA1, AHNAK, TMEM68, ERAP1, HZ, RAD17, NLRC... 
lnc2        [SPATA1, FGG, ERAP1, HZ] 
lnc1  [SPATA1, AHNAK, FGG, TMEM68, ERAP1, HZ, ATP6AP... 
lnc4       [ERAP1, PRSS16, HZ, NLRC5] 

換行符看起來像

           Header4 \ 
lnc1 [SPATA1, AHNAK, FGG, TMEM68, ERAP1, ATP6AP, SA... 
lnc2    [SPATA1, FGG, TMEM68, ATP6AP, HUWE1] 
lnc3 [SPATA1, AHNAK, FGG, ERAP1, HZ, SAASDAS, NLRC5... 

               Header7 
lnc1 [SPATA1, AHNAK, FGG, TMEM68, ERAP1, HZ, ATP6AP... 
lnc2       [SPATA1, FGG, ERAP1, HZ] 
lnc3 [SPATA1, AHNAK, TMEM68, ERAP1, HZ, RAD17, NLRC... 
相關問題