リスト内包表記Tips
Table of Contents
if elseを含むリスト内包表記
次の様に簡単に書けます.
[cc]
dfc = [np.nan if pd.isnull(i) else "{0:7d}".format(int(i)) \
for i in df[col].values]
[/cc]
ただし,dfはpandasのDataFrameで,colは一つのカラム名の変数で,本来7桁の整数ですが,欠損値が含まれているため,floatになっているものとし,これをNaNと整数表記を含むobjectに変換しています.
似たような例で複数のリストを同時に扱う場合はzip関数を使います.
[cc]
dfc = [np.nan if pd.isnull(i1) or pd.isnull(i2) else \
"{0:2d}{1:03d}".format(int(i1),int(i2)) for \
i1,i2 in zip(df[col1].values, df[col2].values)]
[/cc]
Matrixからベクトルを抜き出す
リストをネストしたマトリックスから列のベクトルを抜き出すのはリスト内包を使うと簡単です.リスト内包でマトリックスMから行row(ベクトル)を順番に抜き出し,rowの1つ目の要素を抜き出すにはrow[0]となり,それをすべての行rowについて繰り返せば列columnのベクトルを抜き出したことになります.
[cc]
In [1]: M=[[1, 2, 3],
...: [4, 5, 6],
...: [7, 8, 9]]
In [2]: M[0]
Out[2]: [1, 2, 3]
In [3]: [row[0] for row in M]
Out[3]: [1, 4, 7]
[/cc]