技術メモ

欠損値,発散値の処理 

NaN値の除去 

発散値の除去 

ValueError: Input contains NaN, infinity or a value too large for dtype('float32')への対処 

データフレーム 

行番号とカラム名で要素抽出(カラムも番号にしてilocの方が手っ取り早いが,名前で抽出したい場合) 

参考
https://qiita.com/monokeshi6/items/453d1549db62442a5588

df.at[df.index[行番号],'列名']

リストに別のリストを追加する 

append()メソッド 

メソッドを実行するインスタンスはリストである必要がある
(失敗例)

slist = ['str1','str2','str3','str4','str5','str6']
adlist = ['details1','details2']
→slist[0].append(adlist)を実行すると
AttributeError: 'str' object has no attribute 'append'が表示

(成功例)

[slist[0]].append(adlist)

extend()メソッド 

appendでは入れ子になるのを防げる

In: slist.append(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', ['details1', 'details2']]
In: slist.extend(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', 'details1', 'details2']

内包表記 

・インタプリタ型のpythonではforループのi,j,k呼び出しに時間がかかるので,それを短縮したもの ・可読性に欠けるので,通常のループを作ってから実装するほうが望ましい

基本形 

[[【append()のカッコ内の要素】【内側for文j】【if文】]【外側for文i】]

(配列の次元+1ごとに外に[ 【for文】])を追加する

[[挿入要素 for j in range(len(df)) if(i != j)] for i in range(len(df))]

if分岐を入れるときのルール 

if~,else~のときは【if文】【else文】【for文】の並びにする

[[挿入要素 if(i != j) else 0 for j in range(len(df)) ]for i in range(len(df))]

for文のルール 

【for文】【for文】と続けるときは【外側for】【内側for】で逆にする

[挿入要素 for i in range(len(df)) for j in range(len(df))]

その他 

元のfor文でappend()がないforは,1つ内側のforとつなげて【該当for文】【内側for文】となる

配列の次元削減(append(内包表記)時によく起こるケースへの対処法) 

2次元配列から1次元配列に落とす 

1要素づつappendすればOK(今回は要素の型が辞書形式) 

問題(n×1)型の配列

In: t =[[{'a':1}],[{'a':2}],[{'a':3}],[{'a':4}],[{'a':5}]]
Out: [[{'a': 1}], [{'a': 2}], [{'a': 3}], [{'a': 4}], [{'a': 5}]]
データフレーム時,aで一まとめにしてくれない

appendで新しい1次元配列に入れ直していく(内包表記で表現)

In: c = [t[i][0] for i in range(len(t))]
Out: [{'a': 1}, {'a': 2}, {'a': 3}, {'a': 4}, {'a': 5}]
データフレーム時,Columnsをaとしてまとめてくれる

3次元配列から2次元配列に落とす 

データフレームに[]が入り込むときなどの対処 

参考:
https://human-blog.com/hairetsu/ 例:i×j×k = 6×1×3 配列(2次元配列が6つ)の場合

trilist = [[['a', 'b', 'c']],
[['d', 'e', 'f']],
[['g', 'h', 'i']],
[['j', 'k', 'l']],
[['m', 'n', 'o']],
[['p', 'q', 'r']]]

参考先を元にした内包表記 

dilist = [[trilist[i][j][k] for j in range(len(trilist[i])) for k in range(len(trilist[i][j]))] for i in range(len(trilist))]

3次元配列作成の際の内包表記 

maketrilist = [[[trilist[i][j][k] for k in range(len(trilist[i][j]))] for j in range(len(trilist[i]))] for i in range(len(trilist))]

python処理高速化(for文を使わない書き方集) 

pythonのfor文は処理が呼び出し関係で時間がかかるらしい
→なるべくforを使わずに書くことが時間短縮になる

N重ループ短縮 


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS