我在嘗試清理與此類似的資料幀時遇到了困難:
| 代碼 | 課程名 | EOS | 中 | 測驗 |
|---|---|---|---|---|
| AA101 | 課程一 | 350 | 420 | NaN |
| AA102 | 課程2 | 400 | 470 | NaN |
| AB101 | 課程3 | 第560章 | 570 | NaN |
| AB102 | 課程4 | 410 | 465 | NaN |
| AC101 | 課程5 | # | 522 | NaN |
我只需要在列中保留數值EOS并將#其中出現的字符移動到列中test,以表明該課程需要額外的測驗。這是因為有些值#在實際數字之前有一個,例如Course 3,而有些#值只有作為值,例如Course 5。
資料框是使用 Camelot 創建的,用于從 PDF 表中提取這些值。
我需要的是將其#從該列中取出并將其添加到該test列中。
有沒有簡單的方法來做到這一點?
uj5u.com熱心網友回復:
沒有內置函式可以做到這一點,但可以使用兩行來完成:
df.loc[df['EOS'].str.contains('#', na=False) 'test'] = '#'
df['EOS'] = df['EOS'].str.replace('#', '')
輸出:
>>> df
code course name EOS Mid test
0 AA101 Course 1 350 420 NaN
1 AA102 Course 2 400 470 NaN
2 AB101 Course 3 560 570 #
3 AB102 Course 4 410 465 NaN
4 AC101 Course 5 522
uj5u.com熱心網友回復:
你可以這樣做
data = pd.DataFrame(
[ ["AA101", "Course 1", "350", 420, None],
["AA102", "Course 2", "400", 470, None],
["AB101", "Course 3", "#560", 570, None],
["AB102", "Course 4", "410", 465, None],
["AC101", "Course 5", "#", 522, None] ],
columns = ["code", "course name", "EOS", "Mid", "test"]
)
transformed_data = (
data
.assign(test=lambda d: d["EOS"].apply(lambda d_: "#" if "#" in d_ else None))
.assign(EOS=lambda d: d["EOS"].replace({"#": ""}, regex=True))
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386221.html
上一篇:Pandas:根據字串的一部分是否在另一列中的任何位置創建新列
下一篇:從函式回傳熊貓資料幀
