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_csv
和 sep=','
从文件读取
用 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)
您好,我有以下日志文件:
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_csv
和sep=','
从文件读取
用 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)