為什麼我的 Pandas 邏輯正確,CodeJudger 卻不給分?
最近有許多讀者反應,照著之前的範例碼在 CodeJudger 執行卻無法拿到滿分。
經過研究,發現是因為 CodeJudger 的 Pandas 環境升級 以及 測資判定變嚴格 了!
為了避免大家在考場上失分,我整理了這次改版後的三個「奪分關鍵」:
💡 改版關鍵 1:穩定排序 (Stable Sort)
題目有一行小小的提示:「若排序數值相同時,請依照資料出現先後順序進行排序」。
在舊版本中,直接用 sort_values 可能會過,但新版測資中一定有兩個市場的「西瓜價」是一樣的。
- 必過寫法: 必須加入
kind='mergesort'(或kind='stable')。這能確保數值相同時,原始的市場順序(如台中、鳳山)不會被對調。
💡 改版關鍵 2:語法廢棄 (Deprecation)
新版 Pandas 已經正式移除了舊有的 ix 語法。
- 必過寫法: 選取「台北一」市場行情時,請統一使用
df.loc["台北一"]。
💡 改版關鍵 3:填空邏輯 (Attribute Assignment)
雖然 df.rename() 很方便,但這題的填空設計是要求你修改原始的變數(List),再指派回去給 DataFrame。
- 必過寫法: 修改
indexs與columns串列後,使用df.index = indexs的方式覆蓋。
1. 題目說明:
請開啟PYD03.py檔案,依下列題意進行作答,使輸出值符合題意要求。作答完成請另存新檔為PYA03.py再進行評分。
2. 設計說明:
- 某日各果菜批發市場之西瓜與香瓜之拍賣行情價量表如下:
| 西瓜價 | 西瓜量 | 香瓜價 | 香瓜量 | |
|---|---|---|---|---|
| 三重區 | 9 | 203674 | 13.2 | 18894 |
| 台中市 | 11.7 | 180785 | 12.3 | 54894 |
| 台北一 | 10.1 | 127802 | 14.7 | 18563 |
| 台北二 | 11.8 | 28604 | 14.9 | 21963 |
| 台東市 | 13.2 | 600 | 13.1 | 900 |
| 板橋區 | 6.9 | 38071 | 9.6 | 3555 |
| 高雄市 | 12.1 | 35660 | 10.6 | 9005 |
| 嘉義市 | 12 | 15000 | 13 | 12000 |
| 鳳山區 | 11.7 | 48770 | 9.1 | 14370 |
| 豐原區 | 9.84 | 6100 | 11.89 | 8980 |
2.上述的資料已在PYD03.py中,請撰寫一程式建立資料結構,其中直行標題為項目(西瓜價、西瓜量、香瓜價、香瓜價),橫列標題為交易市場;接著完成下列項目:
a. 輸出如拍賣行情價量表
b. 以西瓜價遞減排序後,輸出各市場的西瓜價
c. 計算台北一市場西瓜/香瓜價量的行情並輸出
d. 將「三重市」改為「三重區」、「香瓜價」改為「洋香瓜價」、「香瓜量」改為「洋香瓜量」,重新輸出整個表格
提示:若排序數值相同時,請依照資料出現先後順序進行排序。
3. 輸入輸出:
輸入說明
無
輸出說明
分別輸出下列4段資料:
a. 拍賣行情價量表
b. 以西瓜價遞減排序後,各市場的西瓜價
c. 台北一市場西瓜/香瓜價量的行情
d. 將「三重市」改為「三重區」、「香瓜價」改為「洋香瓜價」、「香瓜量」改為「洋香瓜量」,重新輸出整個表格
範例輸入
無
範例輸出

題目提示:
# 載入 pandas 模組縮寫為 pd
import ___ as ___
# 建構資料
___ = [[9, 203674, 13.2, 18894],
[11.7, 180785, 12.3, 54894],
[10.1, 127802, 14.7, 18563],
[11.8, 28604, 14.9, 21963],
[13.2, 600, 13.1, 900],
[6.9, 38071, 9.6, 3555],
[12.1, 35660, 10.6, 9005],
[12, 15000, 13, 12000],
[11.7, 48770, 9.1, 14370],
[9.84, 6100, 11.89, 8980]]
___ = ["三重市", "台中市", "台北一", "台北二", "台東市", "板橋區", "高雄市", "嘉義市", "鳳山區", "豐原區"]
___ = ["西瓜價", "西瓜量", "香瓜價", "香瓜量"]
df = pd.___(___, columns=___, index=___)
print('西瓜與香瓜之拍賣行情價量表')
print(df)
print() # 使用print分隔
df1 = df.___(by="___", ascending=___, kind='___')
print('以西瓜價遞減排序')
print(df1['西瓜價'])
print() # 使用print分隔
# 計算台北一市場西瓜/香瓜價量的行情並輸出
df.___["___"]
print('台北一市場的行情')
print(df.___["___"])
print() # 使用print分隔
indexs[0] = "三重區"
df.index = ____
____[____] = "洋香瓜價"
____[____] = "洋香瓜量"
df.____ = ____
print('全體市場行情')
print(df)
參考答案:
# 載入 pandas 模組縮寫為 pd
import pandas as pd
# 建構資料
price = [[9, 203674, 13.2, 18894],
[11.7, 180785, 12.3, 54894],
[10.1, 127802, 14.7, 18563],
[11.8, 28604, 14.9, 21963],
[13.2, 600, 13.1, 900],
[6.9, 38071, 9.6, 3555],
[12.1, 35660, 10.6, 9005],
[12, 15000, 13, 12000],
[11.7, 48770, 9.1, 14370],
[9.84, 6100, 11.89, 8980]]
indexs = ["三重市", "台中市", "台北一", "台北二", "台東市", "板橋區", "高雄市", "嘉義市", "鳳山區", "豐原區"]
columns = ["西瓜價", "西瓜量", "香瓜價", "香瓜量"]
# a. 建立 DataFrame 並輸出
df = pd.DataFrame(price, columns=columns, index=indexs)
print('西瓜與香瓜之拍賣行情價量表')
print(df)
print()
# b. 以西瓜價遞減排序 (關鍵:加入 kind='mergesort' 確保穩定排序)
df1 = df.sort_values(by="西瓜價", ascending=False, kind='mergesort')
print('以西瓜價遞減排序')
print(df1['西瓜價'])
print()
# c. 計算台北一市場行情 (關鍵:使用 loc)
print('台北一市場的行情')
print(df.loc["台北一"])
print()
# d. 修改名稱並重新輸出表格 (關鍵:依照題目填空邏輯修改變數)
indexs[0] = "三重區"
df.index = indexs
columns[2] = "洋香瓜價"
columns[3] = "洋香瓜量"
df.columns = columns
print('全體市場行情')
print(df)



意如老師小叮嚀:
在 CodeJudger 這種自動評分系統中,「輸出字元完全一致」 是拿分的唯一標準。
考試時請務必觀察題目留下的「底線(空格)」位置,不要隨意變更變數名稱或使用非預期的函數喔!
Yiru@Studio - 關於我 - 意如