簡體   English   中英

如何將我的函數應用於DataFrame列?

[英]How to apply my function to DataFrame column?

我定義了以下函數:

def clearString(myString):
    forbidden = r'/\:*?"<>|'
    for character in forbidden:
        if character in myString:
           myString = myString.replace(character,'')
    return myString

刪除文件名中不需要的字符。 我有一列中包含書名的數據框,並且試圖將函數應用於所有字符串,以清除它們,但是一直無法,我一直使用未修改的數據來恢復DataFrame。

我已經在單獨的列和整個DataFrame中嘗試了apply函數,但是都沒有產生積極的結果,因為它是將DataFrame自身分配回去,如下所示:

df = df.apply(clearString)
#Or even
df = clearString(df)

甚至定義一個新的:

df_new = df.apply(clearString)
#Or even
df_new = clearString(df)

我的函數可能有問題,例如未正確處理DataFrames或其他問題?

apply不起作用,因為默認情況下,它將給定的函數應用於每一列(而不是應用於每個元素)。 在給定的示例中, clearString將接收Series參數,而不是str

要將函數應用於DataFrame的所有元素 ,可以使用applymap方法( docs )。

例子:

# if you wanna replace the old dataframe
df = df.applymap(clearString)

# if you wanna keep the old dataframe
new_df = df.applymap(clearString)

您可以使用地圖,甚至可以應用和地圖組合。

如果要修改單個列,可以嘗試以下方法:

df = pd.DataFrame({"Title": ["one ", "two", "three", "four"]})
def clean(title):
    return title.upper()
df["Title"] = df["Title"].apply(lambda x: clean(x))
# OR 
df["Modified_Title"] = df["Title"].apply(lambda x: clean(x))
# OR 
df["Modified_Title1"] = df.apply(lambda x: clean(x["Title"]), axis=1)
# OR 
new_df = df.applymap(lambda x: clean(x)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM