例如,我正在嘗試在現有資料框中創建新的干凈列,并應用如下所示的正則運算式模式。我得到一個關鍵字不能是運算式的 SyntaxError。
for col in cols2:
df.assign(f"{col}_clean"=lambda df:df[col].str.replace(r"\(|\)|,", ""))
df.assign(f"{col}_clean"=lambda df:df[col].str.replace(r"\(|\)|,", ""))
^
SyntaxError: keyword can't be an expression
然后我嘗試分配列名串列,例如
cols2_clean = []
for col in cols2:
clean = f"{col}_clean"
cols2_clean.append(clean)
df.assign(cols2_clean=lambda df:df[cols2].str.replace(r"\(|\)|,", ""))
這不起作用并給出了歸因錯誤 AttributeError: 'DataFrame' object has no attribute 'str'。我唯一的選擇是逐個手動執行此操作嗎?
uj5u.com熱心網友回復:
df.assign()將列名作為關鍵字引數。您不能將字串用作關鍵字引數,它必須是識別符號。
你可以做的是傳遞一個字典**用來把它變成關鍵字引數。
df = df.assign(**{f"{col}_clean": lambda df:df[col].str.replace(r"\(|\)|,", "")})
uj5u.com熱心網友回復:
@Barmar 的答案是正確的,并且正是您想要做的。但是,一種更慣用的 pandas 方法是不使用for-loop 而是使用apply:
cols2 = ['col A', 'col B', 'col C']
df[pd.Index(cols2) '_clean'] = df[cols2].apply(lambda col: col.str.replace(r"\(|\)|,", ""))
當您在apply未指定的情況下呼叫時axis,它將默認為axis=0,這意味著它將為每一列呼叫 lambda 函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468422.html
