所以我有一些服务器日志,我正在尝试解析为表格格式。想象一下,日志的结构如下
a = "value1"
b = "value2"
c = "value3"
a = "value4"
c = "value5"
a = "value2"
b = "value12"
c = "value8"
我对'record'(或我的最终DataFrame中的行)的定义是从A到C的所有列。实际上有30个左右的列,起始列名和结束列名始终是相同。
我可以很容易地将这个文件读入一个列表(使用split(“=”)函数)并得到如下内容: 指数值
1 ['a , 'value1']
2 ['b , 'value2']
3 ['c , 'value3']
4 ['a , 'value4']
5 ['c , 'value5']
6 ['a , 'value2']
7 ['b , 'value12']
8 ['c , 'value8']
我甚至可以将其转换为1记录数据帧,例如: df = pd.DataFrame(List).transpose() 但是我到达了一个重复列的DataFrame 像
a b c a1 c2 a3 b1 c3
value1, value2, value3, value4, value5, value2, value12, value8
我真正想要的是这样的事情:
A B C
Value1 Value2 Value3
Value4 NULL Value5
Value2 Value12 Value8
任何想法如何执行转置步骤以告诉它每次看到“c”时在DataFrame中插入新记录并继续写入直到下次看到C时,将NULL值放在没有记录的情况下特定栏目?
我完全错误地解决了这个问题吗?
答案 0 :(得分:0)
使用:
df[['a','b']] = df['col'].str.split('\s+=\s+', expand=True)
df = (df.set_index([df['a'].eq('a').cumsum(), 'a'])['b']
.unstack()
.rename_axis(None, 1)
.rename_axis(None))
print (df)
a b c
1 "value1" "value2" "value3"
2 "value4" None "value5"
3 "value2" "value12" "value8"
<强>详细强>:
print (df['a'].eq('a').cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
6 3
7 3
Name: a, dtype: int32
<强>解释强>:
col
列\s+=\s+
1 or more whitepaces with =
- MultiIndex
Series
创建a
,并将2
0
与split
和set_index
String[] nodes = new String[3];
boolean in;
int index = 0;
int hash = "hi".hashCode();
in = (nodes[(index = nodes.length - 1) & hash]) != null;
System.out.println(index);
index = (nodes.length - 1) & hash;
System.out.println(index);
eq
cumsum