python - 在 Pandas 中读取文本文件时的左贪心与右贪心列分配
问题描述
假设我们有一个包含如下行的日志文件:
Mar-13-19:04:13 [error] File does not exist: /var/www/favicon.ico
这不是CSV 文件。但是,如果我假设:
sep=' '
- 3列
理论上,至少可以通过两种方式将此文件加载到数据框中:
左贪心
- 第 1 列和第 2 列分配给
sep=' '
-splits,第 3 列分配给保留在每行末尾的任何文本 这将导致:
- Col1 =
Mar-13-19:04:13
- Col2 =
[error]
- Col3 =
File does not exist: /var/www/favicon.ico
- Col1 =
右贪心
- 第 2 列和第 3 列分配给
sep=' '
-splits,第 1 列分配给保留在每行开头的任何文本。 这将导致:
- Col1 =
Mar-13-19:04:13 [error] File does not
- Col2 =
exist:
- Col3 =
/var/www/favicon.ico
- Col1 =
有了这个,我的问题是:
- 如何使用左贪心模式在 Pandas 中加载此文件?
- 如果我在 中指定
error_bad_lines=False
,read_csv
熊猫是否遵循左贪模式?右贪心模式?或者以上都不是?
解决方案
默认情况下,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
推荐阅读
- autodesk-forge - `viewer.navigation.fitBounds` 没有边距
- ajax - 将二维数组从 ajax 数据传递到控制器总是返回一个空值 Asp.Net
- javascript - 如何从 js 文件中导出任何内容?
- javascript - 如何通过单击选择选项访问选择框中的属性名称的值?
- python - 我试图让按钮在 tkinter 中单击后消失,但它的显示错误如 nonetype 对象没有属性 pack_forget()
- node.js - 哪个linux版本在windows 7上支持node js
- javascript - 几个错误而不是一个
- python - 如何将行转换为列表
- android - 获取不正确的包和活动,重试
- nginx - Nginx:如何使用 /#/something 获取 url