Python pandas遍历keywords列的for循环未覆盖df全部行问题咨询
问题原因
- 外层循环逻辑错误:你写的
for p in df.loc[i, 'keywords']并不是遍历df的所有行,for循环的迭代对象会在循环启动前完成计算,初始i=0时会先取第0行的keywords字符串,外层循环实际是在遍历这个字符串的每一个字符,循环总次数等于该字符串的长度,远小于df的总行数,所以只会处理前N行数据后就停止。 - 冗余逻辑问题:内层循环不需要额外定义u变量计数,逐行调用
loc[len(df1)]插入数据的执行效率极低,仅适合极小数据量场景。 - 拆分结果瑕疵:原拆分逻辑没有清理关键词前后的方括号、引号、逗号,得到的词存在大量冗余符号。
修复代码
修正循环写法
import pandas as pd import re df1 = pd.DataFrame(columns=['word']) # 外层遍历所有行索引 for idx in range(len(df)): kw_str = df.loc[idx, 'keywords'] # 先清理所有多余的括号、引号、逗号 cleaned_kw = re.sub(r"[\[\]'\",]", "", kw_str) # 按空格拆分关键词 word_list = cleaned_kw.split() for word in word_list: df1.loc[len(df1)] = {"word": word} print(df1)
更高效的pandas向量化写法(无需手动写循环)
import pandas as pd df1 = ( df["keywords"] # 清理多余符号 .str.replace(r"[\[\]'\",]", "", regex=True) # 按空格拆分 .str.split() # 展开列表为单独行 .explode() # 重置索引 .reset_index(drop=True) # 转为DataFrame并重命名列 .to_frame(name="word") ) print(df1)
内容的提问来源于stack exchange,提问作者Robin5454
相关产品推荐
相关产品推荐

