pandasの続き

前回、動物のデータフレームの処理を行いました。その続きで、今回は、特定の列の抽出、特定の行の抽出、カラムの統合、ファイルへの書き出し、加えて、特定の文字列の切り出しを紹介します。これらの組み合わせ次第でBLASTのベストヒットの抽出ができるようになるはずです。


まず、特定の列の抽出です。

新しいデータフレーム名 = データフレーム名[['カラム名1', 'カラム名2', ...]]

Animalsはdecorationとanimalとanimal_typeのみのデータになりましたね


では今度は、Animalsの中から、爬虫類の行だけを抽出してみましょう。

新しいデータフレーム名 = データフレーム名[データフレーム名['カラム名'] == '指定']

爬虫類の行だけになりました。そういえば、ヘビしかいませんね


では、次に、カラムの結合を行ってみましょう。

今回は新しいデータフレームには入れずに、表示だけさせます。

print(データフレーム名['カラム名1'].str.cat(データフレーム名['カラム名2']))

decorationとanimalが統合されて、2つの文字列がくっついています。


そして、ファイルへの書き出しは、

.to_csv("ファイル名", オプション)

を使います。例えば、Reptileをタブ区切りファイル、インデックス無しで書き出したい時には、オプション指定で

Reptiles.to_csv("Reptiles_list", sep='\t', index=False)

と書きます。


さて、データフレーム”Reptiles”を使ってたくさんのデータから、指定の行だけを抽出したいと思います。pd.merge()を使います。

使い方は、

pd.merge(データフレーム1、データフレーム2、how='left')

とします。最後のオプション、how=が結構大事で、セレクトしたデータをデータフレーム1に置いて、大きなデータ(データフレーム2)から合致する行を取り出して統合するイメージです。

ここでいう、Reptileがセレクトされたデータ、AnimalsA_dropが絞り込みをしたい大きなデータになります。pd.merge()に従って行うと、特定のヘビのdecoration_typeとbody_length(cm)のデータがくっついてきましたね。


最後に、特定の文字列を含む行の抽出です。Pythonの正規表現を使います。

これは実際のBLASTの結果です。gene_idがクエリー配列名、B_flo(もとはtranscript_id(s)でしたが、名前を変更しました)がデータベースの配列名となっています。このgene_idの列だけを取り出して、TRINITY~g数字の部分を切り出したいと思います。

まず、おさらいです。

Bblast_gene_id = B_blast[['gene_id']]

で、gene_idの列だけ入れてしまいます。

何行か下で、切り出しを行っています。

TRINITY_DN26_c0_g1_i1.p1のTRINITY~g数字の部分はPythonの正規表現では

(.+)_[I]\dと書けます。(.+)の部分でなんでも良いので、文字数字記号が続く部分から、最後がアンダースコア、i、数字の直前で切られるので、数字を\dで表し、_i1などで終わる部分を表現します。

関数は、

.str.extract('正規表現', expand=True)

です。expand=Trueにしないと複数行の処理が行えずにエラーがでてしまいます。

データフレーム名['カラム名'].str.extract('正規表現', expand=True)

で処理をして出力すると、TRINITYからg数字のところまでがうまく切り出されていますね。

行数も元のデータと、切り出したデータで数が合っています。

BIOLOGY IS FUN!!

このページでは生物学に関する研究や実験のコツ・裏話、他にも色々ご紹介しております。 This website contains articles about my research experiences, tips for experiments, and others.

0コメント

  • 1000 / 1000