簡體   English   中英

將字典上的迭代轉換為熊貓數據框

[英]Convert an iteration over dictionaries into a pandas dataframe

我已經使用條件語句(未顯示)從2個輸入文件生成2個字典。 然后,我打算使用這兩個字典來識別重疊值。 然后,我想直接將迭代的輸出用作pandas數據框。 為此,我首先將迭代/ for循環輸出到文件(Output.xls)中,然后將文件讀取為pandas數據框。 盡管這很好用,但我想知道是否有一種方法可以將下面迭代中的“換行符”直接用作空熊貓數據框的輸入。 除了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 = 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')  

然后,我使用pandas數據框讀取Output.xls文件:

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

我想知道是否有辦法將上面的“換行符”直接寫到上面標頭為空的熊貓數據框中,而不是創建一個輸出文件,然后將其輸入為pandas數據框。

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

找出所有遺漏的位(例如Alexander用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...  

創建一個列表列表,然后將其用於創建數據框:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM