python - Pandas:每行取一个字符串,用逗号分隔,并将唯一的单词添加到列表中
问题描述
样本df:
filldata = [['5,Blue,Football', 3], ['Baseball,Blue,College,1993', 4], ['Green,5,Football', 1]]
df = pd.DataFrame(filldata, columns=['Tags', 'Count'])
我想要一个列中使用的唯一单词列表Tags
。所以我试图遍历 df 并拉出每一行Tags
,拆分,
并将单词添加到列表中。我可以检查并只添加唯一的单词,或者将它们全部添加,然后只提取唯一的。如果可能的话,我想要两种方法的解决方案,看看哪个更快。
所以预期的输出应该是:
5, Blue, Football, Baseball, College, 1993, Green
.
我试过这些:
tagslist = df['Tags'][0].split(',') # To give me initial starting words
def adduniquetags(newtags, tagslist):
thesetags = newtags.split(',')
tagslist = tagslist.extend(thesetags)
return tagslist
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]
和
tagslist = df['Tags'][0].split(',')
def adduniquetags(newtags, tagslist):
thesetags = newtags.split(',')
for word in thesetags:
if word not in tagslist:
tagslist.append(word)
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]
这两个本质上是相同的,一个只寻找独特的词。这两个都返回一个“无”列表。
我也试过这个:
tagslist = df['Tags'][0].split(',')
def adduniquetags(newtags, tagslist):
thesetags = newtags.split(',')
tagslist = list(set(tagslist + thesetags))
return tagslist
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]
这是为每一行添加唯一值,但不是每行中的单词。因此,即使我尝试在 上拆分,
,它仍然将整个文本视为一个文本,而不是使用字符串中的单个单词。
解决方案
用于Series.str.split
拆分字符串,然后用于np.hstack
水平堆叠 column 中的所有列表Tags
,然后在此堆叠数组上使用np.unique
,以查找数组中的唯一元素。
lst = np.unique(np.hstack(df['Tags'].str.split(','))).tolist()
Series.explode
使用+的另一个可能的想法Series.unique
:
lst = df['Tags'].str.split(',').explode().unique().tolist()
结果:
['1993', '5', 'Baseball', 'Blue', 'College', 'Football', 'Green']
推荐阅读
- c# - 如何在 xamarin 表单中显示模型错误表单 web api
- git - git pull: fatal: refusing to merge unrelated histories
- php - 尝试使用 mysqli 在 PHP 7.3 中启动事务时出现致命错误
- node.js - 节点 multer 使用邮递员发布表单数据 - 未收到任何正文
- android - 材料设计中的 MaterialButton 阴影
- hibernate - 将 SQL 转换为 JPA 规范
- flutter - dartfmt vs dart 格式 vs 颤振格式
- sql-server - 通过 Direct Query 连接到 Azure 专用 SQL 池的 Power BI 报表性能缓慢
- android - 需要有关文本视图、对话框、布尔语句和切换案例的帮助
- sql-server - 将存储过程结果传递给文本框