Python处理CSV无逗号列时用For循环统计词数异常问题咨询
问题1解答
你看到的逗号是Python列表的默认元素分隔符,并非新增到数据里的内容。你调用str.split()会把每条评论文本按空格切分成由多个词组成的列表,列表在输出展示时会自动用逗号分隔不同元素,和原始CSV的内容无关。
你观察到的“重复输出第一行列表”也不是真的内容重复,是因为你把print(num_word)写在了for循环内部:第一次循环把第一条评论的词列表加入容器后打印整个列表,第二次循环加入第二条评论的词列表后再打印完整的容器内容,以此类推,所以前几次输出会看起来包含前面重复的内容。
问题2解答
你的代码存在两个核心问题:
- 没有实际执行词数统计逻辑:你只是把每条评论切分后的词列表存入了
num_word容器,没有取每个词列表的长度(也就是单条评论的词数)。 - 没有处理空值:你认为情况1报错是数据量过大,实际大概率是
Comments列存在空值(NaN),str.split()处理空值会返回NaN,迭代时就会触发报错,和数据量无关。
可正常统计词数的实现代码
写法1:保留循环逻辑的修正版
num_word = [] # 先过滤掉Comments列为空的行,再做切分和统计 for comment_words in data_negative['Comments'].dropna().str.split(): # 取切分后列表的长度,就是单条评论的词数 word_count = len(comment_words) num_word.append(word_count) # 循环结束后再打印全部词数结果,不需要放在循环里 print(num_word) # 如果要把词数作为新列存回原表,可以加这行 data_negative['word_count'] = data_negative['Comments'].dropna().str.split().str.len()
写法2:更高效的Pandas向量化写法(不需要写循环)
# 直接生成词数列,空值对应的词数会设为0 data_negative['word_count'] = data_negative['Comments'].str.split().str.len().fillna(0).astype(int) # 输出所有评论的词数列表 print(data_negative['word_count'].tolist())
内容的提问来源于stack exchange,提问作者Azul
相关产品推荐
相关产品推荐

