如何使用键合并长度不均匀的2个数据帧

时间:2019-02-08 17:43:37

标签: python pandas merge

我正在尝试使用来自一个数据帧的键合并两个数据帧。输入文件是.csv文件,我希望我的输出文件也是.csv文件。

我的两个输入文件如下:

DF1:

Org1   Org2  
OTU_1  OTU_2
OTU_1  OTU 3
OTU_1  OTU_4
OTU_2  OTU_4

DF2:

Org1  Interaction  Ratio
OTU_1  TRUE   0.5
OTU_2  FALSE  0.1

我希望我的输出文件看起来像这样:

Org1  Org2  Interaction  Ratio
OTU_1  OTU_2  TRUE  0.5
OTU_1  OTU_3  TRUE  0.5
OTU_1  OTU_4  TRUE  0.5
OTU_2  OTU_4  FALSE 0.1

我已经执行以下操作:

import sys
import pandas as pd
import io
from io import StringIO

DF1=pd.read_csv(io.StringIO(sys.argv[1].decode()),sep="[;,]",engine="python")
DF2=pd.read_csv(io.StringIO(sys.argv[2].decode()),sep="[;,]",engine="python")


merged=pd.merge(DF1,DF2,how="left",on="Org1")

df.to_csv(merged,sep='\t')

我收到以下错误:

KeyError:'Org1'

将非常感谢获得修复所需信息的信息。

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助,我能够在您的评论指导下解决此问题。

真正的错误是我需要在pd.read_csv()命令中指定dtype = str。没有这个,python无法读取我的键,因为它无法正确读取我的输入文件。我尝试编写csv文件的方式也出现了错误,因此总的来说,该代码在多个级别上均无法正常工作。

发布以下符合预期目的的代码。

import sys
import pandas as pd
import io
from io import StringIO


DF1=pd.read_csv(sys.argv[1],dtype=str)
DF2=pd.read_csv(sys.argv[2],dtype=str)
Org=sys.argv[3]


merged=pd.merge(DF1,DF2,how="left",on=Org)
mergeddf=pd.DataFrame(merged)
mergeddf.to_csv(sys.argv[4],sep=";",encoding="utf-8")