我一直在尝试从数据集中清理特定列。我多次使用 .apply() 函数以便抛出任何可能出现在列的字符串值中的符号。
对于每个符号,函数如下:.apply(lambda x: x.replace("", ""))
虽然我的代码可以工作,但它很长而且不太干净。我想知道是否有更短和/或更好的方法来清洁色谱柱。
这是我的代码:
df_reviews = pd.read_csv("reviews.csv")
df_reviews = df_reviews.rename(columns={"Unnamed: 0" : "index", "0" : "Name"})
df_reviews['name'] = df_reviews["Name"].str.split(':', expand=True)[0]
df_reviews['name'] = df_reviews['name'].apply(lambda x: x.replace("Review", "")).apply(lambda x: x.replace(":", "")).apply(lambda x: x.replace("'", "")).apply(lambda x: x.replace('"', "")).apply(lambda x: x.replace("#", ""))\
.apply(lambda x: x.replace("{", "")).apply(lambda x: x.replace("}", "")).apply(lambda x: x.replace("_", "")).apply(lambda x: x.replace(":", ""))
df_reviews['name'] = df_reviews['name'].str.strip()
如您所见,许多 .apply() 函数使得很难清楚地看到从“name”列中删除的内容。
有人可以帮助我吗?
亲切的问候
最佳答案
您还可以使用正则表达式:
df_reviews['name'] = df_reviews['name'].str.replace('Review|[:\'"#{}_]', "", regex=True)
正则表达式模式:
'Review|[:\'"#{}_]'
评论
:替换“评论”一词|
:或[:\'"#{}_]
- 方括号内的任意字符[]
注意:
如果您想删除所有标点符号:您可以使用它
import string
df_reviews['name'] = df_reviews['name'].str.replace(f'Review|[{string.punctuation}]', "", regex=True)
这将删除以下字符:
!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~
关于python - 清洁 Pandas 列的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75008242/