LoginSignup
0
0

More than 1 year has passed since last update.

個別のcsvファイルから列を抜き出して一つの表にする→記事の内容よりコメント見てください(切実)!!!

Last updated at Posted at 2022-08-16

for文を用いて表を作る

自分用の備忘録です。もし参考になる方がいればコピペしてください!
モチベーション: たくさんの個別ファイルにcsvファイルが格納されている。その中で必要なcolumnのみを抜き出して新たに表を作りたい。しかし、個別ファイルの下記のGenes(遺伝子)の項目は変異があるときのみ記載されていて、変異がないときは表に入らない。従って、全てのファイルを結合して最終的に欠損しているところは変異なし(No Mutation)を入れることになる。

(追記 8/17) CbioPortalというサイトから遺伝子変異情報を集めて結合するときに使いました。自分自身PyThonそんなに得意ではなくてこのコードが無駄が多いとも思ってますのでコメントいただけると嬉しいです! ⇨ @WolfMoon さんにRとPythonでのコードをいただきました、ということで動作するとはいえど素人の私のコードよりコメント欄を見ていただいた方が良いです!!!Sorry!

例:ファイル1, ファイル2, ・・・と各ファイルに患者データが入っている。例えばファイル1には患者番号0001のデータが下記のように格納されている。(Genesに対してMutationがあるときのみ行が作られているようなファイルで、Mutationがないときはそもそも列として入ってない)

Genes Mutation Type Information Project
TP53 Missense Complete IMPACT sequencing
KRAS Nonsesense Half-way METABORIC cohort
EGFR deletion Unevalueted IMPACT sequencing
Genes Mutation Type Information Project
STK11 Missense Complete IMPACT sequencing
KRAS deleteion Complete IMACT sequencing
SMARCA4 Nonesense Unevalueted IMPACT sequencing

といった個別ファイルがたくさんあります、、、、
このうち遺伝子変異情報のみを取り出し、それを各患者について集めて下記のような表を作りたい

PatientID TP53 KRAS EGFR STK11 SMARCA4
Patient0001 Missense None Missense Missense Missense
Patient0002 None Indel Indel No mutation Missense
Patient0003 deletion Nonsense Nonsense Deletion No Mutation

以下にコードを示す (Google colaboratory上を想定)

from pandas._libs.algos import diff_2d
import pandas as pd
from pathlib import Path
import glob
#Google colab上でdataというフォルダに無数のcsvファイルを格納している
#従って、指定するpathは下記の通り
path = Path('/content/data')
#.csvとなっているcsvファイルを全て取得する。関係ないcsvファイルは消すか、より詳細に指定する
#最初にファイルが全部入ったリストを作っておく
file_list1 = glob.glob('**/*.csv')

for i, file in enumerate(path.glob('*.csv')):
#filenameを取得する。これは各個別ファイルの名前にPatientIDが入っているのを想定している
#例えばファイル名がPatient0001, Patient0002などとなっている際にこれを列に入れる
#[5:17]とは、file_list[i]がpathも含めたものを返すからである。試しにfilename[0]を出力してdata/PatientID0001/となっていれば欲しいのは[5:17]のみである
    filename=file_list1[i][5:17]
#csvファイルを読み込む
    df = pd.read_csv(file)
#各ファイルからほしい列を抜き出してリストにする
    genes=df["Genes"].tolist()
#insertしているのは、個別の表を転置して結合するので、一番左の列を新しく作るため
    genes.insert(0, "PatientID")
    mutation=df["MutationType"].tolist()
    mutation.insert(0,filename)
    df2 = pd.Series(data = mutation, index = genes)
    df2 = pd.DataFrame(df2).T
#colab内にshapedという名前のファイルを作り、そこへ格納する。
    df2.to_csv('shaped'+str(filename)+'.csv')

csv_files = glob.glob('*.csv')
#csvファイルの中身を追加していくリストを用意
data_list = []
#読み込むファイルのリストを操作
for file in csv_files:
    data_list.append(pd.read_csv(file))
#リストを全て行方向に結合
#axis=0:行方向に結合, sort
df = pd.concat(data_list, axis=0, sort=True)

df.to_csv("complete.csv",index=False)
0
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0