pd.read_csv 忽略括号内的逗号

Rul*_*uli 7 python regex csv pandas

我有一个非常简单的文件:

[Name]
Streamline 1


[Data]
X [ m ], Y [ m ], Z [ m ], Velocity [ m s^-1 ]
2.66747564e-01, 0.00000000e+00, 2.03140453e-01, (0.00000000e+00, 8.17744827e+00, 0.00000000e+00)
2.66958952e-01, 0.00000000e+00, 2.07407191e-01, (0.00000000e+00, 6.77392197e+00, 0.00000000e+00)
2.63460875e-01, 0.00000000e+00, 2.06593186e-01, (0.00000000e+00, 7.04168701e+00, 0.00000000e+00)
2.65424699e-01, 0.00000000e+00, 2.00831652e-01, (0.00000000e+00, 8.93691921e+00, 0.00000000e+00)
2.70607203e-01, 0.00000000e+00, 2.02286631e-01, (0.00000000e+00, 8.45830917e+00, 0.00000000e+00)
2.68299729e-01, 0.00000000e+00, 1.97365344e-01, (0.00000000e+00, 1.00771456e+01, 0.00000000e+00)
...
Run Code Online (Sandbox Code Playgroud)

我需要将速度作为向量加载到单行中。

我的基本代码:

df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5)
Run Code Online (Sandbox Code Playgroud)

但这种尝试导致第 2 列成为索引,其余的分成 4 列。index_col=False可以解决索引的问题,但是会导致索引超出范围。我需要一个分隔符来隐式告诉 pandas 忽略括号中的任何内容。我认为python 在读取 csv 文件时忽略带有括号的分隔符可能会起作用,但是是的,我到处都有空格。我发现了一些使用扩展函数来加载文件并按行处理它们的解决方案,例如包含括号中偶尔有逗号的列的 CSV 文件会崩溃 pandas.read_csvLoad CSV with data returned into a pandas dataframe。然而,我相信这是一个非常简单的场景,因为所有行都是相似的,并且可以通过单行添加来解决delimiter='some_regex'。然而我无法弄清楚这个正则表达式应该是什么样子。它应该寻找分隔符,,但不是(.*,.*)

我尝试过以下操作,但这会产生一列:

df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5,  delimiter=',^(\(.*,.*\))')
Run Code Online (Sandbox Code Playgroud)

编辑:得到类似 - 的内容,|(?:(\(.*,.*\))),但这会在每个逗号后添加一个空列。

Rul*_*uli 2

经过多次尝试,我找到了如何在此基础上创建一个非常简单的单行的答案。如果有人感兴趣的话,这是:

df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5,  delimiter=',(?![^\(]*[\)])', engine="python")
Run Code Online (Sandbox Code Playgroud)

分隔符检查括号外所有内容中的逗号。简单得就像一个魅力:)