Python関連
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[技術メモ]]
#contents
*欠損値,発散値の処理 [#jbe86d00]
**NaN値の除去 [#t127bceb]
-fillnaを使用してNaN値を含む"行"を削除する
df0 = df0.fillna("N") #NaNを文字Nに置き換えの行が削除さ...
for col in df0.columns.tolist():
if 'N' in df0[col].values.tolist(): #各列でNaN値がな...
df0 = df0[df0[flipdesc] != 'N'] #Nがある行が削除...
**発散値の除去 [#nc4b9be3]
-発散値があるか確認する(float64型だと上手く見れる)
np.any(np.isfinite(df0.astype("float64")))
-Falseの場合float型infが入っている可能性があるので削除
FeatureDF2 = FeatureDF2.replace([np.inf, -np.inf], "N")
--後はNaN値処理のfor文と同様Nがある行を削除する
** ValueError: Input contains NaN, infinity or a value to...
-float32が取りうる値の範囲[-3.4e+38,3.4e+38]を超える値が...
-データフレーム内の最大値を確認
df.max.max() #最初のmaxで各行の最大,次のmaxでその中の最大
-超える値をNan値にするか3.4e+38に置き換えるなりを行う(こ...
df = df[df<np.finfo(np.float32).max] #範囲内の値だけ取り...
--後はNaN値除去と同様
*データフレーム [#ye019583]
**行番号とカラム名で要素抽出(カラムも番号にしてilocの方が...
参考~
https://qiita.com/monokeshi6/items/453d1549db62442a5588
df.at[df.index[行番号],'列名']
*リストに別のリストを追加する [#i16684ee]
**append()メソッド [#d598bcc2]
メソッドを実行するインスタンスはリストである必要がある~
(失敗例)
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()メソッド [#d68437a9]
appendでは入れ子になるのを防げる
In: slist.append(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', ['...
In: slist.extend(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', 'd...
*内包表記 [#g3b54f52]
-インタプリタ型のpythonではforループのi,j,k呼び出しに時間...
-可読性に欠けるので,通常のループを作ってから実装するほう...
**基本形 [#a0386aba]
[[【append()のカッコ内の要素】【内側for文j】【if文】]【...
(配列の次元+1ごとに外に[ 【for文】])を追加する
[[挿入要素 for j in range(len(df)) if(i != j)] for i in ...
**if分岐を入れるときのルール [#i089b4a2]
if~,else~のときは【if文】【else文】【for文】の並びにする
[[挿入要素 if(i != j) else 0 for j in range(len(df)) ]fo...
**for文のルール [#ra7cf60f]
【for文】【for文】と続けるときは【外側for】【内側for】で...
[挿入要素 for i in range(len(df)) for j in range(len(df))]
**その他 [#t86a57e9]
元のfor文でappend()がないforは,1つ内側のforとつなげて【...
*配列の次元削減(append(内包表記)時によく起こるケースへの...
**2次元配列から1次元配列に落とす [#v8ef1273]
***1要素づつappendすればOK(今回は要素の型が辞書形式) [#zb...
問題(n×1)型の配列
In: t =[[{'a':1}],[{'a':2}],[{'a':3}],[{'a':4}],[{'a':5}]]
Out: [[{'a': 1}], [{'a': 2}], [{'a': 3}], [{'a': 4}], [{...
データフレーム時,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次元配列に落とす [#d5c0982b]
***データフレームに[]が入り込むときなどの対処 [#u029566b]
参考:~
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']]]
*** 参考先を元にした内包表記 [#r135c31e]
dilist = [[trilist[i][j][k] for j in range(len(trilist[i...
-外のiを6,中のjを1,内のkを3回まわす
-j,kのappendで['a', 'b', 'c'],[・・・],・・・の1次元のリ...
-↓に比べて内の[]が外れている
***3次元配列作成の際の内包表記 [#zf74ce67]
maketrilist = [[[trilist[i][j][k] for k in range(len(tri...
*python処理高速化(for文を使わない書き方集) [#y13537a0]
pythonのfor文は処理が呼び出し関係で時間がかかるらしい~
→なるべくforを使わずに書くことが時間短縮になる
**N重ループ短縮 [#m3ce9417]
-例1. リスト内(1行)にある同じ要素を検索してカウントする処...
for i in range(len(df12)):
if(i%200 ==0):
print(i)
for j in range(len(df12)):
if(i != j):
for k in range(len(df12.iloc[i,:])):
if(df12.iloc[i,k]==""):
break
for l in range(len(df12.iloc[j,:])):
if(df12.iloc[i,k] == df12.iloc[j,l]):
admatrix.iloc[i,j] +=1
16時間(200要素)*40 = 640時間(26.7日:Core i7-9700K)超非効...
-例2. 2次元配列の要素1つ1つに代入(集合型の演算を使って4重...
for i in range(len(df12)):
if(i%200 ==0):
print(i)
for j in range(len(df12)):
if(i != j):
#print(len((set(df12.iloc[i,1:])&set(df12.il...
admatrix.iloc[i,j]
=len((set(df12.iloc[i,1:])&set(df12.iloc[j,1:])-{""}))
O(n^2)、n=8100で約6.67時間(200要素(10分)*40)かかる
-例3. 内包表記(たぶんこれが一番速い)
終了行:
[[技術メモ]]
#contents
*欠損値,発散値の処理 [#jbe86d00]
**NaN値の除去 [#t127bceb]
-fillnaを使用してNaN値を含む"行"を削除する
df0 = df0.fillna("N") #NaNを文字Nに置き換えの行が削除さ...
for col in df0.columns.tolist():
if 'N' in df0[col].values.tolist(): #各列でNaN値がな...
df0 = df0[df0[flipdesc] != 'N'] #Nがある行が削除...
**発散値の除去 [#nc4b9be3]
-発散値があるか確認する(float64型だと上手く見れる)
np.any(np.isfinite(df0.astype("float64")))
-Falseの場合float型infが入っている可能性があるので削除
FeatureDF2 = FeatureDF2.replace([np.inf, -np.inf], "N")
--後はNaN値処理のfor文と同様Nがある行を削除する
** ValueError: Input contains NaN, infinity or a value to...
-float32が取りうる値の範囲[-3.4e+38,3.4e+38]を超える値が...
-データフレーム内の最大値を確認
df.max.max() #最初のmaxで各行の最大,次のmaxでその中の最大
-超える値をNan値にするか3.4e+38に置き換えるなりを行う(こ...
df = df[df<np.finfo(np.float32).max] #範囲内の値だけ取り...
--後はNaN値除去と同様
*データフレーム [#ye019583]
**行番号とカラム名で要素抽出(カラムも番号にしてilocの方が...
参考~
https://qiita.com/monokeshi6/items/453d1549db62442a5588
df.at[df.index[行番号],'列名']
*リストに別のリストを追加する [#i16684ee]
**append()メソッド [#d598bcc2]
メソッドを実行するインスタンスはリストである必要がある~
(失敗例)
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()メソッド [#d68437a9]
appendでは入れ子になるのを防げる
In: slist.append(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', ['...
In: slist.extend(adlist)
Out: ['str1', 'str2', 'str3', 'str4', 'str5', 'str6', 'd...
*内包表記 [#g3b54f52]
-インタプリタ型のpythonではforループのi,j,k呼び出しに時間...
-可読性に欠けるので,通常のループを作ってから実装するほう...
**基本形 [#a0386aba]
[[【append()のカッコ内の要素】【内側for文j】【if文】]【...
(配列の次元+1ごとに外に[ 【for文】])を追加する
[[挿入要素 for j in range(len(df)) if(i != j)] for i in ...
**if分岐を入れるときのルール [#i089b4a2]
if~,else~のときは【if文】【else文】【for文】の並びにする
[[挿入要素 if(i != j) else 0 for j in range(len(df)) ]fo...
**for文のルール [#ra7cf60f]
【for文】【for文】と続けるときは【外側for】【内側for】で...
[挿入要素 for i in range(len(df)) for j in range(len(df))]
**その他 [#t86a57e9]
元のfor文でappend()がないforは,1つ内側のforとつなげて【...
*配列の次元削減(append(内包表記)時によく起こるケースへの...
**2次元配列から1次元配列に落とす [#v8ef1273]
***1要素づつappendすればOK(今回は要素の型が辞書形式) [#zb...
問題(n×1)型の配列
In: t =[[{'a':1}],[{'a':2}],[{'a':3}],[{'a':4}],[{'a':5}]]
Out: [[{'a': 1}], [{'a': 2}], [{'a': 3}], [{'a': 4}], [{...
データフレーム時,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次元配列に落とす [#d5c0982b]
***データフレームに[]が入り込むときなどの対処 [#u029566b]
参考:~
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']]]
*** 参考先を元にした内包表記 [#r135c31e]
dilist = [[trilist[i][j][k] for j in range(len(trilist[i...
-外のiを6,中のjを1,内のkを3回まわす
-j,kのappendで['a', 'b', 'c'],[・・・],・・・の1次元のリ...
-↓に比べて内の[]が外れている
***3次元配列作成の際の内包表記 [#zf74ce67]
maketrilist = [[[trilist[i][j][k] for k in range(len(tri...
*python処理高速化(for文を使わない書き方集) [#y13537a0]
pythonのfor文は処理が呼び出し関係で時間がかかるらしい~
→なるべくforを使わずに書くことが時間短縮になる
**N重ループ短縮 [#m3ce9417]
-例1. リスト内(1行)にある同じ要素を検索してカウントする処...
for i in range(len(df12)):
if(i%200 ==0):
print(i)
for j in range(len(df12)):
if(i != j):
for k in range(len(df12.iloc[i,:])):
if(df12.iloc[i,k]==""):
break
for l in range(len(df12.iloc[j,:])):
if(df12.iloc[i,k] == df12.iloc[j,l]):
admatrix.iloc[i,j] +=1
16時間(200要素)*40 = 640時間(26.7日:Core i7-9700K)超非効...
-例2. 2次元配列の要素1つ1つに代入(集合型の演算を使って4重...
for i in range(len(df12)):
if(i%200 ==0):
print(i)
for j in range(len(df12)):
if(i != j):
#print(len((set(df12.iloc[i,1:])&set(df12.il...
admatrix.iloc[i,j]
=len((set(df12.iloc[i,1:])&set(df12.iloc[j,1:])-{""}))
O(n^2)、n=8100で約6.67時間(200要素(10分)*40)かかる
-例3. 内包表記(たぶんこれが一番速い)
ページ名: