具有表示集合列表的字符串值的列,将相关信息提取到新列

Posted

技术标签:

【中文标题】具有表示集合列表的字符串值的列,将相关信息提取到新列【英文标题】:Column with String Values Representing List of Sets, Extract Relevant Info to New Columns 【发布时间】:2022-01-18 01:35:11 【问题描述】:

我得到了一些丑陋的数据。我有一个带有列 C 的数据框,它的值是 ea 的字符串。排。但是,它有点复杂。字符串如下所示。

是的,它们是字符串。不,绝对不是字符串集的列表……完全是字符串。

我想遍历 ea。行并从具有 cat=1 和 cat=2 的集合(实际上是字符串)中获取“信息”值(实际上是字符串),以创建两个要填充的新列。我想要什么:

想法?

【问题讨论】:

【参考方案1】:

你可以像这样清理:

temp = df['C'].str.strip('[]').str.split(', ').explode()
df['cat_1'] = temp.apply(lambda x: x[13:].strip('') if x[1:6]=='cat=1' else '').reset_index().groupby('index').agg(lambda x: ', '.join(x))['C'].str.strip(', ')
df['cat_2'] = temp.apply(lambda x: x[13:].strip('') if x[1:6]=='cat=2' else '').reset_index().groupby('index').agg(lambda x: ', '.join(x))['C'].str.strip(', ')

输出:

                                                   C         cat_1  cat_2
0                                                 []                     
1  [cat=1, data=adjks, cat=1, data=pqoek, ca...  adjks, pqoek  hjksy
2                                                 []                     
3                              [cat=1, data=alpqi]         alpqi       
4       [cat=5, data=weee, cat=6, data=wolpwolp]                     

【讨论】:

太棒了!对我有用的是 x[1:7] vs x[1:6]。干得好,谢谢。 我需要顺便解码这些值。我正在考虑在新列中转换为列表一次......然后我可以使用我拥有的另一个表进行迭代以解码它们。如果一个列表有超过 1 个元素,我将继续将这些值附加在一起,例如...索引 1...我将在一个名为 decoded 的新列中添加胡萝卜、苹果。顺便说一句,如果您愿意,我可以提出一个新问题并给您加分。 ***.com/questions/70356195/…

以上是关于具有表示集合列表的字符串值的列,将相关信息提取到新列的主要内容,如果未能解决你的问题,请参考以下文章

具有列表值的列,如果列表具有超过 1 个元素,则解码这两个值并包含在新列的同一行中的列表中

Pyspark/SQL 将具有列表值的列连接到另一个数据框列

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

如何将列表值映射到新对象属性

修改列表视图查询集以汇总包含具有相同值的列的表

添加具有基于从文件名中提取的日期的值的列(值的长度 (1) 与索引的长度 (50) 不匹配)