背景:我有一些在设备制造后的测试过程中生成的日志。每个设备都有一个序列号和一个包含所有数据的相应csv日志文件。就像这样。
DATE,TESTSTEP,READING,LIMIT,RESULT
01/01/2019 07:37:17.432 AM,1,23,10,FAIL
01/01/2019 07:37:23.661 AM,2,3,3,PASS所以有很多这样的日志文件。每一个都有测试数据。我有现场故障设备的序列号。我想使用这些日志文件创建一个模型。然后使用它来预测给定设备在给定其日志文件的情况下是否有失败的机会。
到目前为止,作为学习的一部分,我一直在处理像房价这样的数据。每行都是完整的。根据面积、房间数量等,很容易为预期销售价格定义一个模型。
在这里,我左右为难,试图找到一种方法,以某种方式将所有的日志展平成一行。我在考虑像这样的东西:
DATE_1,TESTSTEP_1,READING_1,LIMIT_1,RESULT_1,DATE_2,TESTSTEP_2,READING_2,LIMIT_2,RESULT_2
1/1/2019 07:37:17.432 AM,1,23,10,FAIL,01/01/2019 07:37:23.661 AM,2,3,3,PASS第一个问题是,我不确定这是否是处理这种数据的正确方法。如果是这样,那么请给我一些指点。
另外,如果这是正确的方法,那么Pandas是否有任何内置的支持?
我将使用scikit-learn创建模型。
发布于 2019-04-30 14:21:26
首先将列转换为有序的CategoricalIndex以便输出中的列的顺序相同,按to_datetime转换DATE列并使用计数器的cumcount将datetimes转换为dates,按set_index创建MultiIndex,按unstack重塑形状,并通过< MultiIndex in columns >C9MultiIndex in columns>对二级代码进行排序。最后,使用reset_index通过list comprehension将其展平
df['DATE'] = pd.to_datetime(df['DATE'])
dates = df['DATE'].dt.date
df.columns = pd.CategoricalIndex(df.columns,categories=df.columns, ordered=True)
g = df.groupby(dates).cumcount().add(1)
df = df.set_index([dates, g]).unstack().sort_index(axis=1, level=1)
df.columns = [f'{a}_{b}' for a, b in df.columns]
df = df.reset_index(drop=True)
print (df)
DATE_1 TESTSTEP_1 READING_1 LIMIT_1 RESULT_1 \
0 2019-01-01 07:37:17.432 1 23 10 FAIL
DATE_2 TESTSTEP_2 READING_2 LIMIT_2 RESULT_2
0 2019-01-01 07:37:23.661 2 3 3 PASS如果还需要在单独的第一列中dates:
df['DATE'] = pd.to_datetime(df['DATE'])
dates = df['DATE'].dt.date
df.columns = pd.CategoricalIndex(df.columns,categories=df.columns, ordered=True)
g = df.groupby(dates).cumcount().add(1)
df = df.set_index([dates.rename('DAT'), g]).unstack().sort_index(axis=1, level=1)
df.columns = [f'{a}_{b}' for a, b in df.columns]
df = df.reset_index()
print (df)
DAT DATE_1 TESTSTEP_1 READING_1 LIMIT_1 RESULT_1 \
0 2019-01-01 2019-01-01 07:37:17.432 1 23 10 FAIL
DATE_2 TESTSTEP_2 READING_2 LIMIT_2 RESULT_2
0 2019-01-01 07:37:23.661 2 3 3 PASS https://stackoverflow.com/questions/55914956
复制相似问题