【发布时间】:2021-12-01 02:16:57
【问题描述】:
我有一个非常简单的文件:
[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)
...
我需要将速度作为矢量加载到一行中。
我的基本代码:
df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5)
但是这种尝试导致第一个 2 列成为索引,其余的分为 4 列。 index_col=False 可以解决索引的问题,但是会导致索引超出范围。我需要一个分隔符,隐含地告诉熊猫忽略括号中的任何内容。我认为python ignore the separator withing brackets while reading a csv file 可能有用,但是是的,我到处都有空间。我找到了一些使用扩展函数加载文件并按行处理的解决方案,例如CSV file containing column with occasional comma in parentheses crashes pandas.read_csv和Load CSV with data surrounded by parentheses into a pandas dataframe。然而,我相信这是一个非常简单的场景,因为所有行都是相似的,并且可以通过添加delimiter='some_regex' 来解决。但是,我无法弄清楚这个正则表达式的外观。它应该寻找分隔符,,而不是(.*,.*)。
我尝试过以下操作,但这会导致单列:
df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5, delimiter=',^(\(.*,.*\))')
编辑:得到这样的东西 - ,|(?:(\(.*,.*\))),但这会在每个逗号后添加一个空列。
【问题讨论】:
-
考虑使用
read_fwf而不是read_csv。