pandas read_table带有正则表达式分隔符,因为负数不具有插入空格

时间:2018-04-26 07:34:40

标签: python regex pandas number-formatting

我正在尝试使用read_table函数将空格分隔表(下面的示例)读入pandas数据帧。

1  0.00000E+00-7.52896E-04 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00247E-01 0.00000E+00
9  2.57945E+00-9.98377E-04 0.00000E+00 1.80923E+02 0.00000E+00 0.00000E+00 1.08995E+03 0.00000E+00 0.00000E+00 1.00795E+01 1.00002E-01 0.00000E+00
18  2.37285E+00-2.20000E-01 0.00000E+00 1.81079E+02-5.53001E+00 0.00000E+00 1.30827E+03 2.01207E+03 0.00000E+00 9.87285E+00 8.64615E-01 0.00000E+00
然而,问题是负值出现时没有分隔符,例如

1.81079E+02-5.53001E+00

以下两个选项无法生成所需的输出:

t=pds.read_table(filepath, sep='\s+|\d\-\d', engine='python')

t=pds.read_table(filepath, sep='(\s+|\d\-\d)', engine='python')

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以先使用

在负值之前添加空格
file_contents = re.sub(r'(\d)(-\d*\.)', r'\1 \2', file_contents)

匹配

  • (\d) - 第1组:数字
  • (-\d*\.) - 第2组:连字符,然后是0+数字,后跟句点。
  • \1\2是占位符,它们从替换模式引用存储在第1组和第2组内存缓冲区中的值(因此,将第1组和第2组值粘贴回结果字符串中)。 / LI>

请参阅regex demo

然后,您可以使用r'\s+'正则表达式作为sep值来阅读表格。