带有RegExp的熊猫生产领先和落后的NAN栏

时间:2018-08-24 16:08:51

标签: python pandas python-3.4

我正在用熊猫读取的文件中有一些简单数据:

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值)从哪里来?

Python:3.4.8 熊猫:0.19.2

1 个答案:

答案 0 :(得分:1)

我真的很惊讶您的正则表达式工作正常!
sep参数用于标识要在何处进行拆分,而不是要识别的令牌。
您真正想要的(实际上,与您想要的东西等效)是可以执行以下操作的正则表达式:

  • 分裂在每个空间上。
  • :上分割,除非后两个字符是数字,后跟另一个:

可以使用一些高级正则表达式匹配来实现,特别是“超前”。有关详细说明,请参见this page

这应该适用于您的示例:

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