(pandas)评论数据清洗
1.空值处理
- 1.空值处理
- 2.数据去重
- 3.定向剔除无用评论
# 直接删除评论列中的空值(不包含空字符串)
df = df.dropna(subset=['comment'])
2.数据去重
去重时最好把多列作为参照,不能只根据评论列,防止删除不同人写出的相同评论。
# 根据用户id与comment两列作为参照,如存在用户id与comment同时相同,那么只保留最开始出现的。
df.drop_duplicates(subset=['user_id', 'comment'], keep='first', inplace=True)
# 重置索引
df.reset_index(drop=True, inplace=True)
3.定向剔除无用评论
1.剔除纯数字评论,先将其转为空字符串,之后对空字符串统一处理。
# 用空字符串('')替换纯数字('123')
df['comment'] = df['comment'].str.replace('^[0-9]*$', '')
2.剔除单一重复字符的评论
# 用空字符串('')替换('111','aaa','....')等
df['comment'] = df['comment'].str.replace(r'^(.)\1*$', '')
3.将评论中的时间转为空字符
# 用空字符串('')替换('2020/11/20 20:00:00')等
df['comment'] = df['comment'].str.replace(r'\d+/\d+/\d+ \d+:\d+:\d+', '')
4.对开头连续重复的部分进行压缩 效果:‘aaabdc’—>‘adbc’ ‘很好好好好’—‘很好’
# 将开头连续重复的部分替换为空''
prefix_series = df_comment.str.replace(r'(.)\1+$', '')
# 将结尾连续重复的部分替换为空''
suffix_series = df_comment.str.replace(r'^(.)\1+', '')
for index in range(len(df_comment)):
# 对开头连续重复的只保留重复内容的一个字符(如'aaabdc'->'abdc')
if prefix_series[index] != df_comment[index]:
char = df_comment[index][-1]
df_comment[index] = prefix_series[index] + char
# 对结尾连续重复的只保留重复内容的一个字符(如'bdcaaa'->'bdca')
elif suffix_series[index] != df_comment[index]:
char = df_comment[index][0]
df_comment[index] = char + suffix_series[index]
将空字符串转为’np.nan’,在使用dropna()来进行删除
# 将空字符串转为'np.nan',即NAN,用于下一步删除这些评论
df['comment'].replace(to_replace=r'^\s*$', value=np.nan, regex=True, inplace=True)
# 删除comment中的空值,并重置索引
df = df.dropna(subset=['comment'])
df.reset_index(drop=True, inplace=True)
哪怕对自己的一点小小的克制,也会使人变得强而有力