首页 > 解决方案 > 在 Pandas 中读取文本文件时的左贪心与右贪心列分配

问题描述

假设我们有一个包含如下行的日志文件:

Mar-13-19:04:13 [error] File does not exist: /var/www/favicon.ico

不是CSV 文件。但是,如果我假设:

理论上,至少可以通过两种方式将此文件加载到数据框中:

左贪心

右贪心


有了这个,我的问题是:

标签: pythonpandascsv

解决方案


默认情况下,pandas 返回类似于右贪心模式的数据框,其余文本分配给索引。

from io import StringIO
data = """Mar-13-19:04:13 [error] client File does not exist: /var/www/favicon.ico"""
pd.read_csv(StringIO(data), sep = ' ', names = ['a','b','c'])


                                                a   b       c
Mar-13-19:04:13 [error] client  File    does    not exist:  /var/www/favicon.ico

一种方法是读取一列中的数据并使用正则表达式提取所需的值,

df = pd.read_csv(StringIO(data), names = ['data'])
df['data'].str.extract('(?P<a>.*)\s\[(?P<b>.*)\]\s(?P<c>.*)')

你得到

    a               b       c
0   Mar-13-19:04:13 error   client File does not exist: /var/www/favicon.ico

推荐阅读