我已经使用条件语句(未显示)从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'])]
The code to iterate over dictionaries and generates a 'newline' is:
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文件如下所示:
标题1标题2标题3标题4标题5标题6标题7标题8标题9标题10标题11
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
最佳答案
创建一个列表列表,然后将其用于创建数据框:
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)