如何在Pandas DataFrame列中获取每个单词的长度?
解决Pandas DataFrame列中获取每个单词长度列表的问题
错误原因
你之前的代码[len(i) for i in df['words']]是对每个单元格整体计算长度:
- 如果单元格是拼接所有单词的长字符串,返回的是整个字符串的字符总数(即所有单词长度之和)
- 如果单元格是单词列表,返回的是列表内单词的数量
这都不是你需要的「每个单词的长度组成的列表」。
解决方案
根据你的words列存储格式,分两种情况处理:
情况1:单元格是空格分隔的单词字符串
如果df['words']的每个单元格是类似"alpha omega up down ..."的空格分隔字符串,先拆分字符串为单词列表,再逐个计算单词长度:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'words': ["alpha omega up down over under purple red blue green"]}) # 生成每个单词长度的列表 df['test'] = df['words'].str.split().map(lambda x: [len(word) for word in x]) # 查看结果 print(df['test'].iloc[0]) # 输出: [5, 5, 2, 4, 4, 5, 6, 3, 4, 5]
情况2:单元格本身是单词列表
如果df['words']的每个单元格已经是["alpha","omega",...]这样的单词列表,直接对列表内的每个单词计算长度:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'words': [["alpha","omega","up","down","over","under","purple","red","blue","green"]]}) # 生成每个单词长度的列表 df['test'] = df['words'].apply(lambda x: [len(word) for word in x]) # 查看结果 print(df['test'].iloc[0]) # 输出: [5, 5, 2, 4, 4, 5, 6, 3, 4, 5]
内容的提问来源于stack exchange,提问作者EB3
相关产品推荐
相关产品推荐

