Pythonについて勉強していく
Pythonに入門する
Pure Python
実装上の最小値
import sys
sys.float_info.min # 2.2250738585072014e-308
プログレスバー
print(f"\r\033[K{i}", end="")
リストの偶数番目・奇数番目の要素を取得する。原理として、リストをスライスする際に [start:stop:step]
のように増分(ステップ)を指定できる。
l = [0, 1, 2, 3]
print(l[0::2]) # [0, 2]
print(l[1::2]) # [1, 3]
内側のループをbreakした場合のみ後続の処理を実行する。
if
else
のインデントがずれていても問題ないらしい(使いたくはない)。
for x in iterable_x:
for y in iterable_y:
if x == y:
break
else:
print(f"{x} has no duplicates.")
NumPy
Pandas
列Aのユニークな要素ごとに、最後の行を取得する。
df.reset_index().groupby("A", as_index=False).last() # インデックスも列として保持
df.index = df["index"] # インデックスを再度割り当て
列Aのユニークな要素ごとに、最後の行以外を取得する。
df[~df.index.isin(df.index)]
インデックスの列名
df.index.name = "index"
df = pd.DataFrame(
index=pd.Series([0, 1, 2], name="index"),
columns=["a", "b", "c"],
)
df = pd.DataFrame(
index=pd.Series(name="index"),
columns=["a", "b", "c"],
)
- (df_result["S_CODE"] != transaction["S_CODE"])[df_result["S_CODE"] != transaction["S_CODE"]]
+ (df_result["S_CODE"] != transaction["S_CODE"])[lambda x: x]
df.itertuples()
でループしたとき、タプルのインデックスは row.index
ではなく row.Index
。
Pandasの要素の中にリストを格納する。
PandasのEDAの初手をやってくれるVSCodeの拡張機能
Pandasのstr.contins()で、リスト内のいずれか文字列を含むかどうかを判別する。
読み込み時のデータ型指定。読み込み時に指定しないと、最初に float
として読み込まれた値を str
に変換する際、値が 12345.0
のようになったりする。
PARSE_DATE = ["date"]
DTYPE = {"string": str}
columns = list(DTYPE.keys()) + PARSE_DATES # オプション
df = pd.read_csv(path, dtype=DTYPE, parse_date=PARSE_DATE)
df[columns]
tenacity
Pythonでリトライ処理を簡単に書けるライブラリ
Streamlit
st.text_input()
によって代入された st.session_state
の値がリセットされることがある。
def main():
# ステートを表示
st.write(st.session_state)
# 初回レンダリング
if "fuga" not in st.session_state:
st.session_state.hoge = "hoge"
st.text_input("テキストを入力", key="fuga") # "fuga"と入力
return
# 次回以降レンダリング
st.button("ボタン")
return
初回レンダリング時の st.session_state
。値は格納されていない。
テキスト入力後の st.session_state
。明示的に代入した hoge
と st.text_input()
によって代入された fuga
が格納されている。
ボタン押下後の st.session_state
。明示的に代入した hoge
は維持されているが、 st.text_input()
によって代入された値 fuga
がリセットされている。
意図があってそのような管理仕様になっているとは思うが、解決方法が分からない。
そのため、以下のように対処療法的に対応している。
def main():
# ステートを表示
st.write(st.session_state)
# 初回レンダリング
if "fuga" not in st.session_state:
st.session_state.hoge = "hoge"
st.text_input("テキストを入力", key="fuga") # "fuga"と入力
return
# 次回以降レンダリング
st.session_state.fuga = st.session_state.fuga # ステートを明示的に代入
st.button("ボタン")
return