Python pandas 活用:「データのマージ」について

スポンサーリンク

バイオインフォマティクスでは、複数のデータセットを統合して解析する ことが非常に重要です。例えば、遺伝子発現データとメタデータの統合、異なる実験の結果の比較、ゲノム変異データと疾患情報のマッピング など、多くの場面で異なるデータソースを組み合わせる必要があります。

Pythonの pandas ライブラリは、こうしたデータ統合を効率的に行うための「データのマージ(merge)」機能を提供しています。本記事では、pandasの データのマージ について、基本的な使い方から応用例まで詳しく解説していきます。


1. データのマージとは?

pandasの データのマージ(merge) は、SQLのJOIN操作と同様 に、共通のカラム(またはindex)を基準に2つのデータフレームを結合する機能です。

例えば、以下のような 遺伝子発現データメタデータ を統合するケースを考えます。

データ1:遺伝子発現データ(gene_expression)

GeneSample1Sample2Sample3
BRCA12.53.11.8
TP538.17.98.5
EGFR5.34.86.1

データ2:遺伝子情報データ(gene_info)

GeneChromosomeFunction
BRCA117DNA repair
TP5317Tumor suppressor
MYC8Transcription factor

この2つのデータセットを “Gene” をキーとして統合することで、遺伝子発現データに遺伝子の詳細情報を付加できます。


2. 基本的なデータのマージ

pandasのデータをマージするには、merge() 関数を使用します。

import pandas as pd

# 遺伝子発現データ
gene_expression = pd.DataFrame({
    "Gene": ["BRCA1", "TP53", "EGFR"],
    "Sample1": [2.5, 8.1, 5.3],
    "Sample2": [3.1, 7.9, 4.8],
    "Sample3": [1.8, 8.5, 6.1]
})

# 遺伝子情報データ
gene_info = pd.DataFrame({
    "Gene": ["BRCA1", "TP53", "MYC"],
    "Chromosome": [17, 17, 8],
    "Function": ["DNA repair", "Tumor suppressor", "Transcription factor"]
})

# "Gene" をキーにしてマージ
merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="inner")
print(merged_df)

出力

    Gene  Sample1  Sample2  Sample3  Chromosome         Function
0  BRCA1      2.5      3.1      1.8          17      DNA repair
1   TP53      8.1      7.9      8.5          17  Tumor suppressor

この場合、how="inner" により 共通する “Gene” のみが統合される(BRCA1, TP53) ため、”MYC” は結果に含まれません。


3. マージ方法の種類

pandasの merge() では、SQLのJOINのように4種類の結合方法があります。

結合方法説明
inner共通するキーのみ結合(デフォルト)
outerすべてのデータを統合(NaNが入る)
left左側のデータを優先して統合
right右側のデータを優先して統合

3.1 left join(左結合)

merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="left")
print(merged_df)

出力

    Gene  Sample1  Sample2  Sample3  Chromosome         Function
0  BRCA1      2.5      3.1      1.8        17.0      DNA repair
1   TP53      8.1      7.9      8.5        17.0  Tumor suppressor
2   EGFR      5.3      4.8      6.1         NaN             NaN

“EGFR” の情報がないため、NaN が入ります。

3.2 outer join(外部結合)

merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="outer")
print(merged_df)

出力

    Gene  Sample1  Sample2  Sample3  Chromosome         Function
0  BRCA1      2.5      3.1      1.8        17.0      DNA repair
1   TP53      8.1      7.9      8.5        17.0  Tumor suppressor
2   EGFR      5.3      4.8      6.1         NaN             NaN
3    MYC      NaN      NaN      NaN         8.0  Transcription factor

すべての遺伝子が統合され、マッチしない部分には NaN が入ります。


4. 応用例:異なるindexでのマージ

merge()left_index=True, right_index=True を使うと、indexを基準にマージできます。

# 遺伝子発現データ
gene_expression.set_index("GeneName", inplace=True)

# 遺伝子情報データ
gene_info.set_index("Gene", inplace=True)

# Indexを基準にマージ
merged_df = gene_expression.merge(gene_info, left_index=True, right_index=True, how="left")
print(merged_df)

この方法は、サンプルIDや遺伝子IDをindexにしている場合に便利 です。


5. まとめ

pandasの merge() を使うことで、バイオインフォマティクスのデータ統合がスムーズに行えます!!

まとめポイント

merge(on="カラム名", how="inner") で共通データを統合
how="left"how="outer" を使うと、より柔軟な統合が可能
set_index() を活用すると、indexベースのマージができる
✅ 遺伝子発現データ、メタデータ、ゲノムデータを統合する際に有効

データ解析の効率を上げるために、ぜひ活用してみてくださいね〜!

タイトルとURLをコピーしました