两个数据帧
DF1:
Key names:
example_ca
example_com
Key names:
EXAMPLE_ca
EXAMPLE_com
DF2:
ch start end strand 5ss 3ss
3 90280167 90280927 + 90280167 90280927
3 90280167 90281242 + 90280167 90281242
3 90280986 90281242 + 90280986 90281242
3 90281284 90284526 + 90281284 90284526
5 33977824 33984550 - 33984550 33977824
代码:
ch start end strand 5ss 3ss
3 90280167 90281242 + 90280167 90281242
5 33977824 33984550 - 33984550 33977824
输出:
c1 = []
c = 0
for ii,rr in df1.iterrows():
c1.append(rr)
c2 = []
with open('3prime.txt', 'w') as w:
for i,r in df2.iterrows():
c2.append(r)
for i in c1:
for j in c2:
start = int(1[4])
end = int(i[5])
fivep = int(j[4])
threep = int(j[5])
if start == fivep:
print i
期望的输出:
ch 3
start 90280167
end 90280927
strand +
5ss 90280167
3ss 90280927
ch 5
start 33983577
end 33984550
strand -
5ss 33984550
3ss 33983577
问题1:当我尝试写入文件时,我得到一个空白文件,其次我想这样做ch start end strand 5ss 3ss
3 90280167 90281242 + 90280167 90281242 #from df1
3 90280167 90281242 + 90280167 90281242 # fromdf2
5 33977824 33984550 - 33984550 33977824 # fromdf1
5 33977824 33984550 - 33984550 33977824 #fromdf2
是真的然后
打印i和下一行print j
像这样的事情
if start == fivep:
然后我试试这个
print i +'\n' + j
TypeError: unsupported operand type(s) for +: 'float' and 'str'
这意味着什么基本上是匹配的df1的第一行和匹配的df2的第二行具有匹配的行
当我尝试第二个打印语句时,我获得与第一个打印语句(打印i)相同的输出,但现在使用j中的元素,有人可以指导我如何处理此问题。
答案 0 :(得分:0)
为什么不通过构建所需的数据框来跳过iterrows
,然后使用df.to_csv('desired/path/to/file.csv')
保存它?
例如,使用我理解的标准,例如
out1 = df1.merge(df2, on='5ss', suffixes=['', '_y'])[df1.columns]
out2 = df2.merge(df1, on='5ss', suffixes=['', '_y'])[df2.columns]
pd.concat(out1, out2).sort_index().to_csv('3prime.txt')
应该做你想做的事。