StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

Pythonでよく忘れる、よく間違える書き方

  • Pandasのデータフレームは、=でコピーしようとすると、コピーじゃなくて参照渡しになるので、コピーしたつもりのdfを処理すると元のdfも処理されてしまう。df2 = df1.copy()とするのを忘れないように。
  • Pandasで要素がNaNかどうかを判定させようとする時、要素を指定してその後ろに.isnull()メソッドを使うんじゃなくて、データフレームに.isnull()を実行してそのあとで要素を指定する。
df.isnull().iloc[1,1]
  • リストのappendは、直接編集するメソッドなので、=で代入しなおさなくてよい。(リンク
  • リストをソートする時も、.sort()をつけるだけで、代入はしなおさなくてよい。
  • Pandasから.to_csvするとき、「quoting=csv.QUOTE_NONNUMERIC」という引数をつけると文字列のフィールドは""をつけることができるが、これは事前にimport csvしてないといけない。
  • リストの要素を置換する時、置換対照表を辞書にしておいて内包表記を使うと簡単にかけたりする。
X = ['あ','い','あ','あ','う','え','お','あ']
Y = {'あ':'ア','お':'オ'}
X2 = [Y[x] if x in Y.keys() else x for x in X]
print(X2)
  • listをユニークにするには、NumPyなら.unique()が使えるが、setにしてからlistに戻せばユニークにはなる。順序は崩れるので注意。
unique_list = list(set(original_list))
  • 数値をゼロ埋め(ゼロパディング)した文字列がほしい時は、数字を文字列にしてから、たとえば.zfill(3)とつけるとゼロ埋め3桁の数字(文字列だけど)になる。
  • Rばかりやってると間違えるのだが、Pythonでは代入はオブジェクトのコピーを意味せず、名前が増えるだけとなる。つまり、代入した先の変数名に対して編集すると、元のオブジェクトが編集されてしまう。
x1 = [1,2,3,4,5]
x2 = x1
x2.remove(3)
print(x1)
print(x2)
[1, 2, 4, 5]
[1, 2, 4, 5]
  • andとorを組み合わせると、andが優先(先にくくられる)なので、A and B or C and Dだと(A and B) or (C and D)の意味になる。明示的に優先させたければ()でくくる。
  • nanとnanは==マッチしないので、nanかどうか判定するにはmath.isnan()を使う必要がある。
  • object型の列は、中に複数種類のデータ型が含まれている可能性がある。特に、pandasで文字列型の列を読み込むとobject型になるが、nanを含んでいる場合、そのnanが別の型になってたりとか。


順次追記していきます。