pandas read_table с разделителем регулярных выражений, поскольку отрицательные числа не имеют пробелов - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь прочитать разделенную пробелами таблицу (пример ниже) в кадр данных pandas, используя функцию read_table.

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 голосов
/ 26 апреля 2018

Вы можете сначала добавить пробелы перед отрицательными значениями с помощью

file_contents = re.sub(r'(\d)(-\d*\.)', r'\1 \2', file_contents)

Это соответствует

  • (\d) - Группа 1: цифра
  • (-\d*\.) - Группа 2: дефис и затем 0+ цифр, за которыми следует точка.
  • \1 и \2 - это заполнители, которые ссылаются на значения, хранящиеся в буферах памяти групп 1 и 2, из шаблона замены (таким образом,, Значения групп 1 и 2 вставляются обратно в результирующую строку).

См. regex demo .

Затем вы можете использовать r'\s+'регулярное выражение в качестве значения sep для чтения таблицы.

...