Pandas 使用 RegExp 生成前导和尾随 NAN 列
Pandas with RegExp Producing Leading and Trailing NAN columns
我正在使用 pandas:
读取文件中的一些简单数据
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
Pandas: 0.19.2
我真的很惊讶你的正则表达式竟然有效!
sep
参数用于识别要拆分的 where,而不是要识别的 what 标记。
您真正想要的(实际上,等同于您想要的)是一个可以:
的正则表达式
- 每个 space.
拆分
- 在
:
上拆分,除非接下来的 2 个字符是数字后跟另一个 :
.
这可以使用一些高级正则表达式匹配来实现,特别是 "lookahead"。有关详细说明,请参阅 this page。
这应该适用于您的示例:
pd.read_csv(path_to_csv, sep=' |:(?!\d{2}:)', header=None, engine='python')
我正在使用 pandas:
读取文件中的一些简单数据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 Pandas: 0.19.2
我真的很惊讶你的正则表达式竟然有效!
sep
参数用于识别要拆分的 where,而不是要识别的 what 标记。
您真正想要的(实际上,等同于您想要的)是一个可以:
- 每个 space. 拆分
- 在
:
上拆分,除非接下来的 2 个字符是数字后跟另一个:
.
这可以使用一些高级正则表达式匹配来实现,特别是 "lookahead"。有关详细说明,请参阅 this page。
这应该适用于您的示例:
pd.read_csv(path_to_csv, sep=' |:(?!\d{2}:)', header=None, engine='python')