linux 日志文件到 pandas 数据框

linux logfile to pandas dataframe

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

log.file 数据是这样的:

 [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

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

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

假设文件打开方式为 f:

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

您的文件中似乎是:

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

基于此,我会推荐

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

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

在 Jotne 的帮助下,我使它像这样工作:

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