【问题标题】:linux logfile to pandas dataframelinux日志文件到熊猫数据框
【发布时间】:2015-06-14 03:30:03
【问题描述】:

您好,我有以下日志文​​件:

日志文件 数据是这样的:

 [string;int;string,string2;int2;string2]
 [string3;int3;string3,string4;int4;string4]

我需要像这样在 pandas 数据框中获取它:

 string int string
 string2 int2 string2
 string3 int3 string3
 string4 int4 string4

我首先在子进程中使用 Sed 删除“[”并用逗号替换“]”,然后使用 pd.read_csv 获取数据帧中的单独值,然后转置以将其放入柱子。但是,我得到以下数据框:

 ""
 string;int;string
 string2;int2;string2
 string3;int3;string3
 string4;int4;string4
 unnamed:5

如何根据“;”将此列拆分为多个列我看到了一些关于拆分列的帖子,但它们对我不起作用。

有人有想法吗?或者甚至是在数据框中获取数据的更简单的解决方案?

【问题讨论】:

  • 你试过pd.read_csv(delimiter=";")吗?
  • 很高兴您已经给出了数据的描述,但是您能否尝试做一些示例行,其中int2 值实际上是整数?所以就像[cat;44;dog;dog;32;mouse]。这样,人们就可以在与您的数据相似的数据上测试他们的解决方案。

标签: python pandas sed


【解决方案1】:

假设文件以f打开:

for line in f:
    tokens=line[1:-1].split(',')
    for token in tokens:
        items=token.split(';')
        print " ".join(items)

【讨论】:

    【解决方案2】:

    好像在你的文件中:

    • 字段以分号分隔
    • 行以逗号分隔
    • 每一对行都包含在[]

    基于此,我会推荐

    • 将文件作为字符串读入内存
    • 用空格替换[]
    • 用换行符替换逗号
    • 将字符串写入文件
    • 使用pandas.read_csvsep=',' 从文件中读取

    【讨论】:

      【解决方案3】:

      awk 简单替换应该可以:

      awk '{gsub(/[][]/,"");gsub(";",FS);sub(",",RS)}1' file
      string int string
      string2 int2 string2
      string3 int3 string3
      string4 int4 string4
      

      或者sed:

      sed 's/[][]//g;s/;/ /g;s/,/\n/' file
      string int string
      string2 int2 string2
      string3 int3 string3
      string4 int4 string4
      

      【讨论】:

      • 我稍微调整了一下,因为每行变量的数量可以改变。我这样做了,就像我发布的答案一样。不过谢谢
      【解决方案4】:

      在 Jotne 的帮助下,我完成了这样的工作:

      // in shell
      sed -i $'s/[][]//g;s/,/\\\n/g' filename
      // in python
      pd.read_csv(filename, sep= ';',skipinitialspace=1, names=header_row)
      

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 2019-06-24
        • 2020-06-03
        • 2020-06-03
        • 2020-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多