前回、動物のデータフレームの処理を行いました。その続きで、今回は、特定の列の抽出、特定の行の抽出、カラムの統合、ファイルへの書き出し、加えて、特定の文字列の切り出しを紹介します。これらの組み合わせ次第で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数字のところまでがうまく切り出されていますね。
行数も元のデータと、切り出したデータで数が合っています。
0コメント