Wiz日誌 新しい python
にゃあにゃあ
わんわん
日々
飽きもせず・・・
いや 飽きてるけど
Wizの 毎日 で ある
キャラの
ステータス
表示スクリプトを
新調した
【chatGPT】様 製 難あり
Microsoft Copilot様 製 難あり
じゃあ
【Gemini】様 は どう作る???
# ==== 【Gemini】様
# 「動作がおかしい」と感じる原因、鋭いご指摘です。
# これはプログラミング(特にデータ分析で使うPandasというライブラリ)の「おせっかいな仕様」が原因で、**犯人は2つ**います。
# ### 1. なぜ「1」が「0」になったのか?(全角スペースの罠)
# 元のCSVの中身をよく見ると、数値の前に**全角スペース**(あるいは特殊な空白)が入っています。
# > ` 1, 1, 1...`
# スクリプト内の `pd.to_numeric(..., errors='coerce')` は、「数字じゃないものが混じっていたら、計算できないから空っぽ(NaN)にする」という動きをします。
# 全角スペース付きの「 1」は数字として認識されず、空っぽになり、最終的に `.fillna(0)` によって **「0」** に置き換えられてしまったのです。
# ### 2. なぜ番号に小数点がつくのか?(NaNの連鎖)
# Pandasでは、列の中に一つでも「空っぽ(NaN)」が発生すると、その列全体を「小数点があるかもしれない列(浮動小数点型)」として扱おうとします。そのため、整数の「11」が「11.0」に変換されてしまったのです。
# ### 🛠️ 修正版:全角スペースを掃除して、整数を維持する
# 空白をきれいに取り除いてから数値に変換し、勝手に小数にならないように修正したコードです。
# ```python
import pandas as pd
from tabulate import tabulate
import os
# ===== 1. 設定エリア =====
csv_path = r"F:\__Libre-ods\_Wiz\Wiz-2026-02-01-成長記録.csv"
party_order = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
print("\n--- Wiz 成長記録 出力メニュー ---")
print("1: ターミナルに表示")
print("2: CSVファイルに出力 (.csv)")
print("3: テキストファイルに出力 (.txt)")
print("4: Excelファイルに出力 (.xlsx)")
mode = input("出力モードを選択してください (1-4): ")
# ===== 2. CSV 読み込み =====
df = pd.read_csv(csv_path, encoding="utf-8", parse_dates=["年月日_時分"])
# 【修正ポイント①】全角・半角スペースを除去してから数値化
status_cols = ["LV", "AGE", "HP", "STR", "IQ", "PIE", "VIT", "AGL", "LUC"]
for col in status_cols + ["番"]:
if df[col].dtype == "object": # 文字列として読み込まれている場合
df[col] = df[col].str.strip().str.replace(' ', '') # 前後の空白と全角スペースを削除
df[col] = pd.to_numeric(df[col], errors='coerce')
# ===== 3. 変化(成長・減少)の計算ロジック =====
results = []
for num in party_order:
char_history = df[df["番"] == num].sort_values("年月日_時分", ascending=False)
if len(char_history) == 0: continue
latest = char_history.iloc[0].copy()
diff_msgs = []
if len(char_history) >= 2:
previous = char_history.iloc[1]
for col in status_cols:
cur_val, pre_val = latest[col], previous[col]
if pd.notnull(cur_val) and pd.notnull(pre_val):
diff = int(cur_val - pre_val)
if diff > 0:
diff_msgs.append(f"{col}+{diff}" if col in ["HP", "LV", "AGE"] else f"{col}+")
elif diff < 0:
diff_msgs.append(f"{col}{diff}" if col in ["HP", "LV", "AGE"] else f"{col}-")
latest["CHANGES"] = ", ".join(diff_msgs)
results.append(latest)
view_df = pd.DataFrame(results)
# ===== 4. データの整形 =====
display_cols = ["番", "年月日_時分", "なまえ", "性", "職業", "種族"] + status_cols + ["CHANGES"]
view_df = view_df[display_cols]
# 【修正ポイント②】整数列が小数点にならないように強制変換
view_df["番"] = view_df["番"].fillna(0).astype(int)
view_df[status_cols] = view_df[status_cols].fillna(0).astype(int)
# 日付を表示用に文字列化
view_df["年月日_時分"] = view_df["年月日_時分"].dt.strftime("%Y-%m-%d %H:%M")
rename_dict = {"番": "#", "年月日_時分": "DATE_TIME", "なまえ": "NAME", "性": "S", "職業": "JOB", "種族": "RACE"}
final_df = view_df.rename(columns=rename_dict)
# ===== 5. 出力振り分け =====
output_filename = "Wiz_Member_List"
if mode == "1":
output = tabulate(final_df, headers="keys", tablefmt="plain", showindex=False,
colalign=("right", "left", "left", "center", "left", "left") + ("right",) * 9 + ("left",))
print("-" * 145)
print(output)
print("-" * 145)
elif mode == "2":
# CSV出力 (float_formatを指定して小数点を防ぐ)
final_df.to_csv(f"{output_filename}.csv", index=False, encoding="utf-8-sig")
print(f"CSV出力完了: {output_filename}.csv")
elif mode == "3":
output = tabulate(final_df, headers="keys", tablefmt="plain", showindex=False)
with open(f"{output_filename}.txt", "w", encoding="utf-8") as f:
f.write(output)
print(f"テキスト出力完了: {output_filename}.txt")
elif mode == "4":
final_df.to_excel(f"{output_filename}.xlsx", index=False)
print(f"Excel出力完了: {output_filename}.xlsx")
### 何を直したか?
# 1. **`.str.replace(' ', '')`**: 倉庫キャラのデータに含まれる「全角スペース」を消去してから計算するようにしました。これで「1」が正しく「1」と認識されます。
# 2. **`astype(int)`**: 「番」の列を最後にもう一度整数に変換するようにしたので、`11.0` ではなく `11` と表示されます。
# これで、全角スペースが混じった「ありえない数値」の倉庫キャラも、名簿に正しく表示されるはずです!試してみてください。
# 次に気になる点があれば、またいつでもどうぞ!
# ==============================
# DATE_TIME NAME S JOB RACE LV AGE HP STR IQ PIE VIT AGL LUC CHANGES
1 2026-02-09 02:05 じじぃ~ G LORD HUMAN 23 25 272 15 18 18 18 18 16 LV+2, HP+2, LUC+
2 2025-03-08 22:00 じじぃ~ G PRIEST GNOME 105 20 155 18 14 12 18 14 15
3 2026-02-01 07:30 じじぃ~ G LORD HUMAN 48 24 429 18 18 18 18 18 18 LV+1, HP+1, PIE+
4 2026-02-09 02:05 じじぃ~ G SAMURAI DWARF 30 21 215 18 18 16 18 17 18 LV+2, HP+2, PIE+, V
# ==============================
なかなかに
使いやすい♪
生成AI様
も
得意不得意
センスによりけり
3回目の 挑戦で
じじぃ~ の
は~と を 鷲掴み♪
じじぃ~
