Панды с RegExp, производящие ведущие и конечные столбцы NAN - PullRequest
0 голосов
/ 24 августа 2018

У меня есть несколько простых данных в файле, который я читаю с помощью панд:

2018:08:23:07:35:22:INFO:__main__:Info logger message

В файле нет начальных или конечных вкладок, пробелов и т. Д.

Я прочитал этот файл в кадре данных, используя следующее:

df = pandas.read_csv("/u01/app/DataLake/tester/tester.log", header=None, index_col=False, sep=r'(\d{4}:\d{2}:\d{2}:\d{2}:\d{2}:\d{2}):(.+):(.+):(.+)',engine='python')

Однако я получаю следующее:

>>> print(df)
     0                    1        2         3                       4   5
0  NaN  2018:08:23:07:35:22     INFO  __main__     Info logger message NaN

Где находится первый и последний столбец (значения NaN)откуда?

Питон: 3.4.8 Панды: 0.19.2

1 Ответ

0 голосов
/ 27 августа 2018

Я на самом деле удивлен, что ваше регулярное выражение даже сработало!
Параметр sep предназначен для определения , где для разделения, а не , что токенов, которые нужно распознать.
То, что вы действительно хотите (на самом деле, эквивалент того, что вы хотите), это регулярное выражение, которое может:

  • Разделить на каждое пространство.
  • Разделить на :, если следующие 2 символа не являются цифрами, за которыми следует еще один :.

Это может быть достигнуто с помощью некоторого расширенного сопоставления регулярных выражений, в частности, «lookahead». См. эту страницу для подробного объяснения этого.

Это должно работать для вашего примера:

pd.read_csv(path_to_csv, sep=' |:(?!\d{2}:)', header=None, engine='python')
...