1

2 つの大きなデータ チャンクがあり、2 つの共通の列がそれらを結び付けています。一方は他方のサブセットである必要がありますが、マージを実行すると、最終的な製品はサブセットよりも小さいため、元の行 (およびサブセット内の行) を見て確認したいと考えています。適切にマージできない理由。おそらく上流のスクリプトのエラーですが、初心者のパンダの使用が間違っている可能性があります。

2 つのデータセットの値を繰り返し処理し、マージされたデータセットにないものを見つけるという明らかな方法で実行できますが、はるかに効率的な「パンダ」の方法があると想定しています。

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")

データが互いにどのように関連しているかの例を示すために編集しました。CHROM と POS に一意に関連付けられた chip_raw に GT、スコア、rsid があります (これらの 2 つの列が一緒になって一意性を識別します)。次に、別のファイルから取得した vcf_gt と gq があります。マージされていない chip_raw にあるものと、seq_data/merged についても同じものを確認したいと思います。

私はパンダを学んでいるので、パンダを使ってそれを行うことに興味があります.ライブラリが各アイテムを反復してマージされているかどうかを確認するよりも効率的に行うようです.

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

rightorを使用leftすると、マージのどちら側が問題を引き起こしているかを特定するのにも役立ちます。

于 2013-10-02T16:01:11.907 に答える