使用Python 3和pandas 0.19.2
我有一个以这种方式格式化的日志文件:
[Header1][Header2][Header3][HeaderN]
[=======][=======][=======][=======]
[Value1][Value2][Value3][ValueN]
[AnotherValue1][ValuesCanBeEmpty][][]
...
...这非常类似于CSV,每个值都被[
和]
包围,并且没有真正的分隔符。
将该内容加载到pandas DataFrame中的最有效方法是什么?
答案 0 :(得分:2)
您可以read_csv
使用分隔符][
,\
必须将其转义。然后是replace
列和值,并按dropna
删除所有NaN
的行:
import pandas as pd
from pandas.compat import StringIO
temp=u"""[Header1][Header2][Header3][HeaderN]
[=======][=======][=======][=======]
[Value1][Value2][Value3][ValueN]
[AnotherValue1][ValuesCanBeEmpty][][]"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="\]\[", engine='python')
df.columns = df.columns.to_series().replace(['^\[', '\]$'],['',''], regex=True)
df = df.replace(['^\[', '\]$', '=', ''], ['', '', np.nan, np.nan], regex=True)
df = df.dropna(how='all')
print (df)
Header1 Header2 Header3 HeaderN
1 Value1 Value2 Value3 ValueN
2 AnotherValue1 ValuesCanBeEmpty NaN NaN
print (df.columns)
Index(['Header1', 'Header2', 'Header3', 'HeaderN'], dtype='object')
答案 1 :(得分:0)
我认为您可以从每行的开头删除]
,从每行的末尾删除[
,然后使用分隔符][
进行阅读。
s ='''[Header1][Header2][Header3][HeaderN]
[=======][=======][=======][=======]
[Value1][Value2][Value3][ValueN]
[AnotherValue1][ValuesCanBeEmpty][][]'''
f = StringIO(s)
s1 = ''.join([line.lstrip('[').rstrip('\n]') + '\n' for line in f.readlines()])
pd.read_csv(StringIO(s1), sep='\]\[', engine='python')
输出
Header1 Header2 Header3 HeaderN
0 ======= ======= ======= =======
1 Value1 Value2 Value3 ValueN
2 AnotherValue1 ValuesCanBeEmpty NaN NaN