Python pandas:indexの操作

スポンサーリンク

バイオインフォマティクスでは、大規模な遺伝子発現データやゲノム配列データを扱うことが一般的です。その際、Pythonの pandas ライブラリを活用することで、データの整理や解析を効率的に行うことができます。

pandasでは 「index(インデックス)」 を活用することで、データの検索やフィルタリング、集約が容易になります。本記事では、indexの基本的な操作から応用的な使い方まで を、バイオインフォマティクスの実例を交えながら解説します。


1. indexの基本操作

pandasのindexは、データフレームの行にラベルを付ける仕組みであり、デフォルトでは0から始まる整数が自動で割り振られます。しかし、サンプルIDや遺伝子名をindexとして設定することで、データ処理を直感的に行えるようになります

1.1 indexの設定

データフレームを作成し、特定の列をindexとして設定する方法を見てみましょう。

import pandas as pd

# サンプルデータ
df = pd.DataFrame({
    "Sample": ["S1", "S2", "S3"],
    "Gene": ["BRCA1", "TP53", "EGFR"],
    "Expression": [2.5, 8.1, 5.3]
})

# "Sample"列をindexに設定
df.set_index("Sample", inplace=True)
print(df)

出力

       Gene  Expression
Sample                 
S1     BRCA1        2.5
S2      TP53        8.1
S3      EGFR        5.3

これで、”Sample”列がindexになり、各サンプルに対する遺伝子と発現値を簡単に参照できるようになりました。


1.2 indexをリセットする

indexを通常の列に戻したい場合は、reset_index() を使います。

df.reset_index(inplace=True)
print(df)

出力

  Sample   Gene  Expression
0     S1  BRCA1        2.5
1     S2   TP53        8.1
2     S3   EGFR        5.3

indexが解除され、”Sample”が通常の列として戻りました。


1.3 indexを使ったデータの取得

indexを指定してデータを取得するには、loc[] を使います。

print(df.loc["S2"])

出力

Gene          TP53
Expression     8.1
Name: S2, dtype: object

このように、”S2″の行データを直接取得できます。


2. indexの応用操作

基本的なindexの使い方を理解したところで、応用的な操作についても見ていきましょう。


2.1 indexの変更

indexを変更したい場合は、set_index() を再び使うことができます。

df.set_index("Gene", inplace=True)
print(df)

出力

       Sample  Expression
Gene                    
BRCA1      S1        2.5
TP53       S2        8.1
EGFR       S3        5.3

今度は”Gene”列をindexにしました。遺伝子をキーにデータを管理したい場合に便利です。


2.2 複数のindex(MultiIndex)

pandasでは、複数のindex(MultiIndex)を設定する ことも可能です。例えば、サンプルIDと遺伝子名の両方をindexにすることで、データの整理をより細かく行えます。

df = pd.DataFrame({
    "Sample": ["S1", "S1", "S2", "S2", "S3"],
    "Gene": ["BRCA1", "TP53", "BRCA1", "TP53", "EGFR"],
    "Expression": [2.5, 8.1, 3.2, 7.9, 5.3]
})

df.set_index(["Sample", "Gene"], inplace=True)
print(df)

出力

               Expression
Sample Gene             
S1     BRCA1        2.5
       TP53         8.1
S2     BRCA1        3.2
       TP53         7.9
S3     EGFR         5.3

このように、サンプルIDと遺伝子名の両方をindexにすることで、階層的なデータ管理が可能になります。

データを取得する際も、複数のindexを指定できます。

print(df.loc[("S1", "TP53")])

出力

Expression    8.1
Name: (S1, TP53), dtype: float64

2.3 indexのソート

indexをソートしたい場合は、sort_index() を使います。

df.sort_index(inplace=True)
print(df)

この操作により、indexが昇順に並び替えられ、検索の効率が向上します。


2.4 indexの名前を変更する

indexに名前を付けることで、可読性が向上します。

df.index.names = ["Sample ID", "Gene Name"]
print(df)

出力

                      Expression
Sample ID Gene Name             
S1        BRCA1            2.5
          TP53             8.1
S2        BRCA1            3.2
          TP53             7.9
S3        EGFR             5.3

このように、indexのラベルを明示することで、データの意味がより分かりやすくなります。


3. バイオインフォマティクスでのindexの活用例

バイオインフォマティクスでは、遺伝子発現データや変異データを扱う際に、indexを活用するとデータの管理が容易になります。

3.1 特定の遺伝子の発現値を取得

例えば、「TP53の発現値をすべて取得したい」場合、以下のように簡単に抽出できます。

print(df.xs("TP53", level="Gene Name"))

出力

            Expression
Sample ID             
S1                8.1
S2                7.9

3.2 発現値が一定以上のデータを抽出

filtered_df = df[df["Expression"] > 5.0]
print(filtered_df)

このように、indexを活用したデータのフィルタリングも簡単に行えます。


4. まとめ

pandasのindexを適切に活用することで、バイオインフォマティクスのデータ解析がより効率的になります!!

  • 基本操作set_index(), reset_index(), loc[] を使ってデータを整理
  • 応用操作:MultiIndexの設定、indexのソートや名前変更
  • バイオインフォマティクスでの活用:遺伝子発現データの管理、特定の遺伝子やサンプルの抽出

大規模なデータを扱う際に、ぜひpandasのindexを活用してみてくださいね〜!

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