Pythonの基本操作メモ|文字列とbool・range・コマンドライン引数・DataFrame化
/ 6 min read
Table of Contents
はじめに
基本的なのに毎回調べ直してしまう操作をまとめました。
文字列をbool型に変換する
bool("False") は True を返します。空文字列以外はすべて True になるためです。文字列の内容で判定したい場合は、自分で関数を書きます。
def str2bool(s: str) -> bool: return s.lower() in ["true", "t", "yes", "1"]str2bool("True") # Truestr2bool("false") # Falsestr2bool("1") # Truestr2bool("no") # Falserange関数の引数
range(3)# 0, 1, 2
list(range(3)) # リストとして見たいとき# [0, 1, 2]
range(2, 5) # 第1引数 ≦ i < 第2引数# 2, 3, 4
range(0, 5, 2) # 第3引数は増分# 0, 2, 4
range(10, 0, -4) # 負の増分で逆順# 10, 6, 2引数の数で意味が変わります。
| 書き方 | 意味 |
|---|---|
range(stop) |
0から stop の手前まで |
range(start, stop) |
start から stop の手前まで |
range(start, stop, step) |
step ずつ増減 |
終了値は常に含まれません。range(2, 5) に5は入らない、というのがいちばん間違えやすいところです。
コマンドライン引数を受け取る
$ python script.py 引数1 引数2sys.argv にリストとして入ります。
import sys
name = sys.argv[0] # スクリプト名(script.py)arg1 = sys.argv[1] # 引数1arg2 = sys.argv[2] # 引数2sys.argv[0] はスクリプト名で、実際の引数は [1] からです。
多次元配列をDataFrameにしてCSV出力する
機械学習の予測結果(n行×m列のnumpy配列)を、提出形式のCSVにする例です。
import pandas as pd
# 配列をそのままDataFrameにするsubmission = pd.DataFrame(y_pred)
# 一番左にid列を追加するsubmission.insert(0, "id", test_df["id"])
# ヘッダーとインデックスなしで出力するsubmission.to_csv("submission.csv", header=False, index=False, encoding="utf-8")insert() の引数は挿入位置・列名・値の順です。submission["id"] = ... と書くと右端に追加されてしまうため、先頭に置きたい場合は insert() を使います。
提出形式にヘッダーが必要かどうかは、参加しているコンペの指定に従ってください。header=False はヘッダー行を出力しない指定です。
おわりに
どれも基本的な操作ですが、range の終了値や sys.argv[0] のように、うろ覚えだと1つずれるものばかりです。うまく動かないときは、まず境界を確認してみてください。
