pandas如何删除tweet文本列空值、仅含空白字符的无效行
解决方法
你需要的过滤逻辑可以直接通过pandas字符串处理方法实现,仅需1行代码即可完成「空值、仅含空白字符行」的删除需求,同时你的现有代码存在3处明显问题:
- 仅标记了是否为无效行,没有实际执行过滤操作
- 空白字符计数列的计算逻辑错误,
sum()会对全列求和,导致所有行的CONTEO_ESPACIOS值都为全局总数,无逐行判断意义 - 额外小bug:转推计数列与点赞列重名,均为
ME_GUSTA,会导致后续数据使用出错
核心过滤代码
在你拼接完所有列之后,替换原有无效行处理的代码即可:
# 直接删除TWEETS列为空、仅含空白字符的行 datos = datos[datos['TWEETS'].astype(str).str.strip().str.len() > 0].reset_index(drop=True) # (可选)如果需要保留统计列,可以按如下逻辑逐行计算 # 标记内容是否全为空白 datos['pass/fail'] = np.where(datos['TWEETS'].astype(str).str.strip().str.len() == 0, 'FAIL', 'PASS') # 标记首尾是否含空格 datos['HAVE_WHITESPACE'] = datos['TWEETS'].astype(str).str.match(r'^\s|\s$') # 统计空白字符总数 datos['CONTEO_ESPACIOS'] = datos['TWEETS'].astype(str).str.count(r'\s')
上述逻辑中str.strip()会删除字符串首尾的所有空白字符(空格、换行符、制表符等),如果处理后字符串长度为0,说明原内容无有效信息,直接过滤即可。
修正后的完整代码片段(仅替换无效行处理部分)
# CONCATENANDO DATAFRAMES datos = pd.concat([datos, id, creado, usuario, fuente, like, retweet, quote, idioma, location], axis=1) # 修正重名列问题:转推列名改为RETWEET datos.columns = ['TWEETS', 'ID', 'FECHA_CREACION', 'USUARIO', 'FUENTE', 'ME_GUSTA', 'RETWEET', 'CITADO', 'IDIOMA', 'LOCACION'] # 核心过滤:删除无有效内容的tweet行 datos = datos[datos['TWEETS'].astype(str).str.strip().str.len() > 0].reset_index(drop=True) # Hora de publicación datos['HORA_PUBLICACION'] = datos['FECHA_CREACION'].dt.hour datos['DIA_SEMANA'] = datos['FECHA_CREACION'].dt.day_name() # Extrayendo solo los tweets del día anterior datos['FECHA_CREACION'] = pd.to_datetime(datos['FECHA_CREACION']).dt.date datos = datos[datos['FECHA_CREACION'] == previous_date]
内容的提问来源于stack exchange,提问作者josemax277
相关产品推荐
相关产品推荐

