我正在用熊猫读取的文件中有一些简单数据:
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
答案 0 :(得分:1)
我真的很惊讶您的正则表达式工作正常!
sep
参数用于标识要在何处进行拆分,而不是要识别的令牌。
您真正想要的(实际上,与您想要的东西等效)是可以执行以下操作的正则表达式:
:
上分割,除非后两个字符是数字,后跟另一个:
。可以使用一些高级正则表达式匹配来实现,特别是“超前”。有关详细说明,请参见this page。
这应该适用于您的示例:
pd.read_csv(path_to_csv, sep=' |:(?!\d{2}:)', header=None, engine='python')