python - 在熊猫系列中保留带有图案的元素而不将它们转换为列表
问题描述
我有以下数据框:
df = pd.DataFrame(["Air type:1, Space kind:2, water", "something, Space blu:3, somethingelse"], columns = ['A'])
我想创建一个新列,其中包含每一行所有具有“:”的元素。例如,在第一行我想返回“type:1, kind:2”,第二行我想返回“blu:3”。我通过以下方式使用列表理解进行管理:
df['new'] = [[y for y in x if ":" in y] for x in df['A'].str.split(",")]
但我的问题是新列包含列表元素。
A new
0 Air type:1, Space kind:2, water [Air type:1, Space kind:2]
1 something at the start:4, Space blu:3, somethingelse [something at the start:4, Space blu:3]
我没有经常使用 Python,所以我不是 100% 是否缺少更具体的 Pandas 方法来做到这一点。如果有的话,很高兴了解并使用它。如果这是一种正确的方法,我如何将元素转换回字符串以便对它们执行正则表达式?我试过如何将列表中的项目连接到单个字符串?但这并没有像我希望的那样工作。
解决方案
你可以pd.Series.str.findall
在这里使用。
df['new'] = df['A'].str.findall('\w+:\w+')
A new
0 type:1, kind:2, water [type:1, kind:2]
1 something, blu:3, somethingelse [blu:3]
编辑:
当有多个单词时,请尝试
df['new'] = df['A'].str.findall('[^\s,][^:,]+:[^:,]+').str.join(', ')
A new
0 Air type:1, Space kind:2, water Air type:1, Space kind:2
1 something, Space blu:3, somethingelse Space blu:3
推荐阅读
- asp.net - _layout 模板中未显示 ASP.NET MVC 内容页面
- javascript - 邮件到正文中的对齐
- tensorflow-serving - “不支持节点名的地址系列”警告会阻止正常服务吗?
- r - R per ID column 按值列表删除行
- node.js - Mongoose/Mongodb 查询不适用于 TypeScript 对象
- formatting - PhpStorm - 如何移动分隔线
- c++ - 分配内存时出现 QT 错误代码 -529697949
- powershell - Cloudberry Powershell 管理单元:基于 LastWriteTime 同步文件
- tensorflow - 动态RNN:填充词向量
- html - 如何删除用于解析实际值的 html 标签,然后将它们放回去?