我有一个来自数据库的 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,如果这有什么区别的话。谢谢。