将字典上的迭代转换为熊猫数据框
我已经使用条件语句(未显示)从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
创建列表然后您可以用它来创建你的数据帧列表:
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)
谢谢你的工作,为我所用的数据框添加列名:df.columns = ['Header1','Header2'......'Header10'] – BioProgram
搞清楚什么样亚历山大带来了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...
几乎可以肯定,有一个简单的方法可以做到这一点。然而,我很不清楚输入是什么样的。如果问题简化了,我会更容易帮忙。 – piRSquared
@piRSquared thx评论。我已经添加了上面的字典。我希望有所帮助。 – BioProgram
我认为这是Python 3?另外,什么是'f_exp1_dict'和'f_exp2_dict'? – Alexander