1

我有两个大数据块,两个公共列将它们捆绑在一起。一个“应该”是另一个的子集,但是当我执行合并时,最终产品小于子集,所以我想查看原始行(以及子集中的行)以查看为什么它无法正确合并。这可能是上游脚本中的一些错误,但我的新手 pandas 使用可能有误。

我可以通过迭代两个数据集的值并找到合并中缺少的值的明显方式来做到这一点,但我假设有一种更有效的“熊猫”方式。

chip_raw= pandas.read_csv(filename, names=["CHROM", "POS", "GT", "score", "rsid"], sep=" ")
seq_data= pandas.read_csv(seq_filename, names=["CHROM", "POS", "vcf_gt", "gq"], sep="\t")
merged = pandas.merge(chip_raw, seq_data, on=["CHROM", "POS"], how="inner")

我进行了编辑以显示数据如何相互关联的示例。我在 chip_raw 中有 GT、score 和 rsid,它们唯一地绑定到 CHROM 和 POS(这两列一起标识唯一性)。然后,我有来自不同文件的 vcf_gt 和 gq 。我想看看chip_raw中有什么没有被合并,seq_data/merged也是如此。

我只是对使用 pandas 来做这件事感到好奇,因为我正在学习 pandas,而且似乎库比迭代每个项目并查看它是否存在于合并中更有效。

4

1 回答 1

2

在某些情况下,只需检查outer合并的结果即可NaN

In [119]: dfrm
Out[119]:
          A           B         C  D
0 -1.312700    0.760710  1.044006  0
1 -0.792521   -0.076913  0.087334  1
2 -0.557738    0.982031  1.365357  2
3  1.013947  100.000000 -0.356652  3
4  1.278278  100.000000  0.550492  4
5  0.116599  100.000000 -1.290245  5
6 -1.808143   -0.818014  0.713614  6
7  0.233726  100.000000  0.561103  7
8  2.344671  100.000000 -0.759296  8
9 -1.658047    1.756503 -0.996620  9

In [120]: dfrm1 = dfrm.copy()

In [121]: dfrm1.ix[3, 'D'] = 888

In [122]: dfrm1
Out[122]:
          A           B         C    D
0 -1.312700    0.760710  1.044006    0
1 -0.792521   -0.076913  0.087334    1
2 -0.557738    0.982031  1.365357    2
3  1.013947  100.000000 -0.356652  888
4  1.278278  100.000000  0.550492    4
5  0.116599  100.000000 -1.290245    5
6 -1.808143   -0.818014  0.713614    6
7  0.233726  100.000000  0.561103    7
8  2.344671  100.000000 -0.759296    8
9 -1.658047    1.756503 -0.996620    9

In [123]: pandas.merge(dfrm, dfrm1, left_on='D', right_on='D', how='outer')
Out[123]:
         A_x         B_x       C_x    D       A_y         B_y       C_y
0  -1.312700    0.760710  1.044006    0 -1.312700    0.760710  1.044006
1  -0.792521   -0.076913  0.087334    1 -0.792521   -0.076913  0.087334
2  -0.557738    0.982031  1.365357    2 -0.557738    0.982031  1.365357
3   1.013947  100.000000 -0.356652    3       NaN         NaN       NaN
4   1.278278  100.000000  0.550492    4  1.278278  100.000000  0.550492
5   0.116599  100.000000 -1.290245    5  0.116599  100.000000 -1.290245
6  -1.808143   -0.818014  0.713614    6 -1.808143   -0.818014  0.713614
7   0.233726  100.000000  0.561103    7  0.233726  100.000000  0.561103
8   2.344671  100.000000 -0.759296    8  2.344671  100.000000 -0.759296
9  -1.658047    1.756503 -0.996620    9 -1.658047    1.756503 -0.996620
10       NaN         NaN       NaN  888  1.013947  100.000000 -0.356652

使用rightorleft也可以帮助确定合并的哪一方造成了问题。

于 2013-10-02T16:01:11.907 回答