我定义了以下功能:
def clearString(myString):
forbidden = r'/\:*?"<>|'
for character in forbidden:
if character in myString:
myString = myString.replace(character,'')
return myString
删除文件名中不需要的字符。 我有一列中有书名的数据框,并且尝试将功能应用于所有字符串,以清除它们,但是一直无法,我一直使用未修改的数据来恢复数据框。
我已经在单独的列和整个DataFrame中尝试了apply函数,但都不会产生积极的结果,因为它是将DataFrame自身分配回去,如:
df = df.apply(clearString)
#Or even
df = clearString(df)
甚至定义一个新的:
df_new = df.apply(clearString)
#Or even
df_new = clearString(df)
我的函数可能出了点问题,例如未正确处理DataFrames或某些东西?
答案 0 :(得分:1)
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)
答案 1 :(得分:0)
您可以使用地图,甚至可以将“应用”和地图组合使用。
答案 2 :(得分:0)
如果要修改单个列,可以尝试以下方法:
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))