如何在熊猫中加载此类数据

时间:2019-04-30 06:18:02

标签: python pandas scikit-learn sklearn-pandas

背景:我有一些日志,这些日志是在制造后对设备进行测试期间生成的。每个设备都有一个序列号和一个包含所有数据的相应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创建模型。

1 个答案:

答案 0 :(得分:1)

首先将列转换为与输出中的列顺序相同的有序CategoricalIndex,将to_datetime转换为DATE列,然后用Series.dt.datecumcount转换为日期时间}作为计数器,通过set_index创建MultiIndex,通过unstack重塑形状,并通过sort_indexMultiIndex in columns的第二级进行排序。最后用reset_indexlist 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

如果还需要在单独的第一列中date

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