我有一个用read_csv或read_table在pandas中尝试读取的日志文件。我得到了这个结果的例子:
0 date=2015-09-17 time=21:05:35 duration=0 etc...在1列上。
我想拆分每一行,取其名称(如日期、时间等)并将它们转换为列,这样我就可以得到:
date time duration ...
0 2015-09-17 21:05:35 0 谢谢!
发布于 2018-11-02 03:26:00
我知道这是一个古老的帖子,但我遇到了同样的问题,并找到了解决方案。错误Expected n fields in line n, saw n可能是由于每行具有不同的列数。如果每行的列排序不同,这种方法也不好用。我在这里写了一个示例代码,它将您的日志转换为json,然后再转换为pandas Dataframe。
import pandas as pd
import json
path='log_sample.log'
log_data=open(path,'r')
result={}
i=0
for line in log_data:
columns = line.split('') #or w/e you're delimiter/separator is
data={}
for c in columns:
key = c.split('=')[0]
value=c.split('=')[1]
data[key]=value
result[i]=data
i+=1
j=json.dumps(result)
df=pd.read_json(j, orient='index')发布于 2017-11-23 18:09:41
-编辑答案以解决间距不一致的问题:
不确定pythonic方法应该是什么,但这里有一个方法可以工作。
以OP的数据示例为例:
0 date=2015-09-17 time=21:05:35 duration=0
1 date=2015-09-17 time=21:05:36 duration=0
2 date=2015-09-17 time=21:05:37 duration=0
3 date=2015-09-17 time=21:05:38 duration=0
4 date=2015-09-17 time=21:05:39 duration=0
5 date=2015-09-17 time=21:05:40 duration=0我遍历每一行并在等号处拆分,然后抓取所需的文本:
import pandas as pd
log_data = open('log_sample.txt', 'r')
split_list = []
for line in log_data:
thing1 = line.split('=')
#print(thing1)
date = thing1[1][:10]
time = thing1[2][:8]
dur = thing1[3]
split_list.append([date, time, dur])
df = pd.DataFrame(split_list, columns=['date', 'time', 'duration'])
df-第一个答案:
正如@jezrael在评论中提到的,你可以在read_csv中使用"sep“参数。
pd.read_csv('test.txt', sep=r'\\t', engine='python') #[1]请参见:
https://stackoverflow.com/questions/47452552
复制相似问题