我有两个txt文件我想读入python:1)一个地图文件,2)一个数据文件。我想让一个查找表或字典从TWO COLUMNS中读取一个值,并使用pandas.map函数确定要放入第3列的值。实际的地图文件大约是700,000行,真正的数据文件是大约1000万行。
玩具数据框(或者我可以重新创建为字典) - 地图
Chr Position Name
1 1000 SNPA
1 2000 SNPB
2 1000 SNPC
2 2000 SNPD
玩具数据框 - 数据文件
Chr Position
1 1000
1 2000
2 1000
2 2001
结果决赛桌:
Chr Position Name
1 1000 SNPA
1 2000 SNPB
2 1000 SNPC
2 2001 NaN
我发现了几个有关此问题的问题,只有一个列查找:Adding a new pandas column with mapped value from a dictionary。但似乎无法找到使用2列的方法。我也对其他可以处理基因组数据的包持开放态度。
作为奖励第二个问题,如果有一种方法可以映射第三列,如果它具有一定数量的映射值,那也是很好的。换句话说,上面得到的表的第4行将映射到SNPD,因为它只有1。但是我很乐意为上面提供解决方案。
答案 0 :(得分:3)
我会这样做:
读取您的地图数据,以便前两列成为索引:
dfm = pd.read_csv('/path/to/map.csv', delim_whitespace=True, index_col=[0,1])
如果您有delim_whitespace=True
作为分隔符,则将sep=','
更改为,
读取你的DF(设置相同的索引):
df = pd.read_csv('/path/to/data.csv', delim_whitespace=True, index_col=[0,1])
加入您的DF:
df.join(dfm)
输出:
In [147]: df.join(dfm)
Out[147]:
Name
Chr Position
1 1000 SNPA
2000 SNPB
2 1000 SNPC
2001 NaN
PS为奖金问题尝试this