[[Pythonバイオ]] ~
&counter();   &lastmod();~

*pandasティップス [#gfafdcc8]

**行選択と列選択 [#s06c1b34]
***行位置選択 [#ocd73bc9]

***行の値選択、列の値選択 [#c8f0f893]

**セル選択 [#l2d0b6fa]

**行演算と列演算 [#g8a09294]

**NaN扱い [#s643db78]
NaNはnumpyのnan

DFでなければ
 if np.isnanUnp.nan):
     hogehoge

DFでのnan判定

[[Reference→API reference のgeneral function:https://pandas.pydata.org/pandas-docs/stable/reference/general_functions.html#top-level-missing-data]]にある
 df = pd.DataFrame8{[1,3],[2,np.nan]])
 print(df.isnull())
 print(df.notnull())
なお、isnull()はisna()のalias、notnull()はnotna()のalias


**初めに空のDataFrameを作って後からデータ行を足す [#u5bf5dd4]
 df = pd.DataFrame( columns=['A', 'B'] )
 for u in [0, 1, 2, 3]:
     temp_series = pd.Series( [i, i*i], index=df.columns )
     df = df.append( temp_series, ignore_index=True )


**read_csvとto_csv [#uc197a4a]
***read_csv [#c3b65411]
[[pandasでcsv/tsvファイル読み込み(read_csv, read_table) | note.nkmk.me:https://note.nkmk.me/python-pandas-read-csv-tsv/]]~
[[pandas.read_csv — pandas 0.25.0 documentation:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html]]~
[[codecs — Codec registry and base classes — Python 3.7.4 documentation:https://docs.python.org/3/library/codecs.html#standard-encodings]]

 import pandas as pd
 pd.read_csv('filename', sep='\t', header=0, skiprows=[], encoding='cp932')

または
 with open('filename', 'r', encoding='...') as fin:
     pd.read_csv(fin, ... )

***to_csv [#v2cce651]
 df = ...
 df.to_csv('filename', ...)


**read_excelとto_excel [#of1b91ac]
[[pandas.DataFrame.to_excel — pandas 0.25.0 documentation:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html]]

If you wish to write to more than one sheet in the workbook, it is necessary to specify an ExcelWriter object:

 >>> df2 = df1.copy()
 >>> with pd.ExcelWriter('output.xlsx') as writer:  # doctest: +SKIP
 ...     df1.to_excel(writer, sheet_name='Sheet_name_1')
 ...     df2.to_excel(writer, sheet_name='Sheet_name_2')

**ヒストグラム [#ic4eefe7]

**散布図 [#h1e623b6]

**ヒートマップ [#z0569817]

**階層的クラスタリング [#uec2b39e]
 import numpy as np
 from scipy.cluster.hierarchy import dendrogram, linkage
 from scipy.spatial.distance import pdist
 import matplotlib.pyplot as plt
 X = np.array([[1,2], [2,1], [3,4], [4,3]])
 Z = linkage(X, 'single')  # ward法を使うならば 'single' の代わりに 'ward' を指定する
 dendrogram(
     Z,
     leaf_font_size=8.,  # font size for the x axis labels
 )
 plt.show()

 %matplotlib inline
 import pandas as pd
 import matplotlib.pyplot as plt
 from scipy.cluster.hierarchy import linkage, dendrogram
 df_count_tpm = pd.read_csv("count_tpm.tsv", sep="\t", index_col=0)
 tpm_t = df_count_tpm.T
 print(df_count_tpm.head())
 from scipy.spatial.distance import pdist
 linkage_result = linkage(tpm_t, method='average', metric='correlation')
 plt.figure(num=None, figsize=(16, 9), dpi=200, facecolor='w', edgecolor='k')
 dendrogram(linkage_result, labels=df_count_tpm.columns)
 plt.show()

**k-means法によるクラスタリング [#g269d509]

**mySQLアクセス [#mb48d1b0]
 def read_db(query):
     engine = create_engine('mysql+mysqldb://userid:password@localhost/dbname?charset=utf8',\
                            echo=False)
     dfr = pd.io.sql.read_sql(query, engine)
     return(dfr)
 
 query = 'select * from tablename'
 df = read_db(query)

**ファイルの存在 [#ead665d2]
 import os
 path = "./sample"
 os.path.exists(path)

**pickle [#r9cb401a]
 with open(picklefname, 'rb') as pf:
     df = pickle.load(pf)

 with open(picklefname, 'wb') as pwf:
     pickle.dump(df, pwf)


** 条件式(3項演算子) [#g859559a]
 x = "OK" if n == 10 else "NG"

**文字列のリストを繋いで1つの文字列にする [#ec82a71e]
 s = ''
 for u in list:
    s += u

'間に挿入する文字列'.join([連結したい文字列のリスト])
 s = ''.join(list)

**文字列の検索 [#i02e3afc]
 >>> "spam".find("pa")
 1
 >>> "spam".find("x")
 -1
indexは見つからないときにエラーを返す

**Seriesに2引数の関数をapplyする場合 [#k62ded28]
 df.x.apply(f1, args=(2,))
 # または、 apply にキーワード引数で与える
 df.x.apply(f1, b=2)

**DF内の検索 [#t51adbc8]
 df[X].isin([list])  listでなければならない。

**pandasで任意の位置の値を取得・変更するat, iat, loc, iloc [#r3974ed5]
 https://note.nkmk.me/python-pandas-at-iat-loc-iloc/

**argv, argc [#v0ea81c0]
 import sys
 argvs = sys.argv;
 argc = len(argvs)
 if (argc != 2):
     print('Usage: python %s filename' % argvs[0])
     quit()

**リストのソート [#k7cb2fe9]
 newls = sorted(list)
メソッドsortはin-placeでソートするので注意。
 list.sort()  # listそのものが置き換わる

**グローバル変数 [#hd2fe0e1]
https://uxmilk.jp/12505
 var = 1
 def add_ten(x):
     global var
     var = 10
     print var + x
  
 add_ten(2)    # 12
 print var     # 10

**リストの差分 [#w1338c7e]
https://python.ms/sub/optimization/if-vs-try/list-deletion/#_6-1-1-%E6%AF%94%E8%BC%83%E5%AF%BE%E8%B1%A1
 def subtract_list(lst1, lst2):
     lst = lst1.copy()
     for e2 in lst2:
         try:
             lst.remove(e2)
         except ValueError:
             continue
     return lst
ifでチェックするより早い

**型のチェック [#yf21f317]
特にNaNがあると、NaNはfloat型だと思い込むので、後の処理でぶつかることがある。

その時に、型チェックで逃げるとすると、(pandas的には個別の型チェックよりはdropnaなどの方がいいと思うが)必要になる。

[[Pythonで型を取得・判定するtype関数, isinstance関数 | note.nkmk.me:https://note.nkmk.me/python-type-isinstance/]]

なのだが、isinstance()の方がよさそうだ。typeで引っかかない場合がある。

**列の型変換 [#la791077]
 df['innings'].astype(np.int64)

**リストの任意の位置への項目挿入 [#aa79d344]
 list.insert(位置, 値)
リストを置き換えるので注意

**おまけ bashのループ [#m8969d16]
 #!/usr/bin/bash
 samples=("Anc" "1_2-1" "2_2-1" "2_5-1" "2_5-1-7A" "1_2-2" "2_2-2" "2_6-2" "2_6-2-10E")
 for f in "${samples[@]}"
 do
   #nohup python ProcessGD.py $f > $f.out &
   echo $f
 done

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS