使用正则表达式在 Pandas Series 的各个单元格内分隔逗号分隔的值

2024-07-01

我有一个来自数据库的 csv 文件,我已将其转换为我正在尝试清理的 Pandas DataFrame。问题之一是多个值已输入到需要拆分的单个单元格中。复杂的因素是有一些字符串注释(也带有逗号)需要保持完整。下面的示例以系列形式说明了该问题。

我拥有的:

Index  |  values    
0      | 2.54,3.563
1      | bad design, right?

我想要的是:

Index  |   level_0   |  values      
0      |     0       |    2.54   
1      |     0       |    3.563 
2      |     1       |    bad design, right?      

正如您所看到的,有逗号分隔我想要拆分的值,逗号后面没有空格,而字符串注释中的逗号后面都有空格。应用正则表达式进行拆分似乎很容易。我下面的解决方案使用另一个 StackOverflow 解决方案中的策略,即使用 Series.str.split 将值分成单独的列,然后堆叠这些列。这个策略效果很好。然而,在这种情况下,正则表达式显然没有识别分割。这是我的代码:

Import pandas as pd

# Example Series:
data = pd.Series(("2.54,3.56", "3.24,5.864", "bad design, right?"), name = "values")

# Split cells with multiple entries into separate rows 
split_data = data.str.split('[,]\b').apply(pd.Series)

# Stack the results and pull out the index into a column (which is sample number in my case)
split_data = split_data.stack().reset_index(0)
split_data = split_data.reset_index(drop=True)

我是正则表达式的新手,但从我看过的指南以及使用几个特定于 Python 的正则表达式沙箱来看,正则表达式 []\b 似乎应该分割值,而不是注释。但是,它不会使用此正则表达式分割任何内容。

这是调试器的结果,它表明这应该有效:调试演示 https://www.debuggex.com/r/UwTVnYS7GRSkAKJL

我在这里错过了一些简单的事情吗?使这项工作有更好的想法吗?我正在使用 Python 3.5,如果这有什么区别的话。谢谢。


我倾向于使用前瞻;如何操作取决于您的预期数据。

这是一个消极的前瞻。它说“一个逗号后面不跟空格”,如果你是的话,这将是首选sure所有带逗号的注释都有空格,并且希望将“red,green”视为要分割的内容。

data.str.split('[,](?!\s)').apply(pd.Series)

另一种选择是对看起来像有效值的东西进行积极的预测;你的例子是数字,所以例如这只会在逗号后跟一个数字上分割:

data.str.split('[,](?:\d)').apply(pd.Series)

正则表达式非常强大,但老实说,如果这是一个长期问题,我不确定这个解决方案是否适合您。将大多数情况作为一次性迁移应该没问题,但从长远来看,我会考虑在问题出现之前尝试解决问题。无论如何,这是 Debuggex 的 python 正则表达式备忘单,以防它对您有用:https://www.debuggex.com/cheatsheet/regex/python https://www.debuggex.com/cheatsheet/regex/python

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式在 Pandas Series 的各个单元格内分隔逗号分隔的值 的相关文章

随机推荐

  • Spark SQL中如何按时间间隔分组

    我的数据集如下所示 KEY Event Type metric Time 001 event1 10 2016 05 01 10 50 51 002 event2 100 2016 05 01 10 50 53 001 event3 20
  • 如何在node.js中编写转换流

    我有一个 csv 解析器作为一系列转换流实现 process stdin pipe iconv decodeStream win1252 pipe csv parse pipe buildObject pipe process stdout
  • 使用 querySelectorAll 获取选定的选项

    我想知道是否可以在 Javascript 中获取当前选定的选项
  • 使用支持流式传输的 basicHttpBinding 保护 WCF 服务

    我的问题是关于安全访问仅向我们公司内部用户公开的 WCF 服务的最佳 也称为 最不痛苦 方法 目标是确保只能通过每个用户安装的单个 Windows 窗体应用程序访问该服务 当调用该服务时 我希望该服务能够验证它是从允许的应用程序调用的 要保
  • java代码中的问号

    有人能解释一下下面代码中的问号吗 INITIAL PERMANCE 也是代码中的静态最终常量 但是语法的最后一行被称为什么 Synapse AbstractCell inputSource float permanence inputSou
  • 可变参数模板中的可变参数模板推导

    我不确定标题是否有意义 但这个例子实际上非常简单 A converter struct with a generic constructor template
  • 终止宏在验证时进一步执行

    我有一个method A 从多种方法调用 在方法 A 的条件下 我必须终止宏 我看到一个选项是Exit sub但这只会退出当前的sub ie method A 剩下的程序继续进行 如何处理这个问题 Sub mainMethod method
  • 使用水晶报表和 VS2010 安装项目无法注册水晶 dll

    我在VS2010中构建了一些水晶报表 并为其创建了一个安装项目 它在我的开发计算机上部署得很好 但在尝试将其安装到客户端计算机上时出现以下错误 我用谷歌搜索这个错误有一段时间了 发现 VC 2005 可再发行组件是一个先决条件 我已将这些合
  • 如何在视图中调用存储过程?

    如何调用在视图中返回数据的存储过程 这可能吗 SQL Server 中不允许这种构造 内联表值函数可以作为参数化视图执行 但仍然不允许像这样调用 SP 下面是一些交替使用 SP 和内联 TVF 的示例 您会发现 TVF 更加灵活 它基本上更
  • 如果没有发生触摸事件,Android SurfaceView 会变慢

    我正在制作一款游戏 除了游戏循环之外一切都很顺利 我正在使用 SurfaceView 并绘制 2D Sprites 位图 目前游戏是一艘穿过小行星带的飞船 飞船停留在屏幕中央 手机向任一方向倾斜以移动小行星 小行星改变位置而不是玩家 当旧的
  • JavaScript 相当于 htonl?

    对于 AJAX 请求 我需要发送一个幻数作为请求正文的前四个字节 首先是最高有效字节 以及请求正文中的其他几个 非常量 值 JavaScript 中是否有相当于 htonl 的东西 例如 给定 0x42656566 我需要生成字符串 Bee
  • 使用 jsoup 收集倒计时器并为 android 设置计时器

    我想解析 eBay 上的倒计时器 span class 5g 20h span 如何用 jsoup 解析它以在 android studio 上创建倒计时器 我可以像平常一样解析它吗element 像下面这样 更新 getMsFromStr
  • 如何从 Tokio 中的非主线程运行异步任务?

    use std thread use tokio task 0 3 4 tokio main async fn main thread spawn task spawn async println 123 join 编译时我收到警告 war
  • F# 泛型/函数重载语法

    我对如何在没有显式类型声明的情况下将函数标记为泛型感到困惑 a gt a let add a b a b 这给了我们 val add a int gt b int gt int 但是我们可以立即调用 add Hello World 现在 a
  • matplotlib中有制作散点图矩阵的函数吗?

    散点图矩阵示例 matplotlib pyplot中有这样的函数吗 对于那些不想定义自己的函数的人来说 Python 中有一个很棒的数据分析库 称为Pandas http pandas pydata org 在那里可以找到分散矩阵 http
  • 激活虚拟环境不起作用

    我创建了两个 virtualenv 并安装了两个不同版本的 django 现在我在激活两个环境时遇到问题 我喜欢这样 source Django1 6 bin activate 然后我看到环境被激活了 然后我这样做 pip install
  • Boost的Dijkstra算法教程

    我很难弄清楚如何使用 Boost 的 Dijkstra 算法 我已经阅读了他们的示例和文档 但我仍然无法理解如何使用它 Boost的文档 http www boost org doc libs 1 50 0 libs graph doc d
  • 当我尝试使用 LWJGL 库加载声音时,为什么会收到错误“NoClassDefFoundError: sun/misc/Unsafe”?

    This is the screenshot of my Eclipse project files 当我尝试启动时出现以下错误new Sound Res MouseClick ogg 我的班级中的对象AudioPlayer在第 15 行
  • find -regex 比 find | 慢grep

    我有一个使用正则表达式查找文件的脚本 代码如下 find dir grep regex 该脚本运行有点太慢 我想优化它 搜索需要一些时间来执行 我希望从中获得更好的性能 我尝试过这个尝试 find dir regex regex 我预计结果
  • 使用正则表达式在 Pandas Series 的各个单元格内分隔逗号分隔的值

    我有一个来自数据库的 csv 文件 我已将其转换为我正在尝试清理的 Pandas DataFrame 问题之一是多个值已输入到需要拆分的单个单元格中 复杂的因素是有一些字符串注释 也带有逗号 需要保持完整 下面的示例以系列形式说明了该问题