例如,我有一个如下所示的数据帧:
name eventlist
0 a [{'t': '1234', 'n': 'user_engagem1'},{'t': '2345', 'n': 'user_engagem2'},{'t': '3456', 'n': 'user_engagem3'}]
1 b [{'t': '2345', 'n': 'user_engagem4'},{'t': '1345', 'n': 'user_engagem5'},{'t': '1356', 'n': 'user_engagem6'},{'t': '1345', 'n': 'user_engagem5'},{'t': '1359', 'n': 'user_engagem6'}]
2 c [{'t': '1334', 'n': 'user_engagem3'},{'t': '2345', 'n': 'user_engagem4'},{'t': '3556', 'n': 'user_engagem2'}]
我和他一起闲逛关于芬德尔用一个字符串,它似乎有效,我得到的结果是 ['1234'、'2345'、'3456'],但我无法将其应用到dataframe中
^{pr2}$我想得到的结果是
name eventlist
0 a ['1234', '2345', '3456']
1 b ['2345', '1345','1234','1356', '1356']
2 c ['1334', '2345', '3556']
或者更好,我可以得到这样的结果
name t_first t_last
0 a 1234 3456
1 b 2345 1359
2 c 1334 3556
您可以使用字符串来转换字典列表中的}s获得值:
ast.literal_eval
,然后通过t
和{或使用
^{pr2}$re.findall
:然后将}创建为原始:
DataFrame
和{另一个带有^{} 和^{} 新列的解决方案:
str.findall
需要一个参数:regex模式。在然后可以将其加载到单独的列中:
^{pr2}$另一个更好的选择是使用
re.compile
预编译模式并在循环中运行,从findall
结果中提取第一个和最后一个项目。在如果需要将它们转换为int,请将
out.append([name, a[0], a[-1]])
替换为out.append([name, int(a[0]), int(a[-1])])
。在上面的解决方案假设您总是有多个匹配项。如果可能只有一个匹配项或没有匹配项,则可以通过检查
count
后面的匹配数来修改解决方案。在相关问题 更多 >
编程相关推荐