Как загрузить этот вид данных в пандах - PullRequest
2 голосов
/ 30 апреля 2019

Справочная информация: у меня есть журналы, которые создаются во время тестирования устройств после изготовления. Каждое устройство имеет серийный номер и соответствующий файл журнала 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 Ответ

1 голос
/ 30 апреля 2019

Сначала преобразовать столбцы в упорядоченные CategoricalIndex для того же порядка столбцов в выходных данных, преобразовать DATE столбец в to_datetime и преобразовать дату и время в даты на Series.dt.date с cumcount для счетчика, создать MultiIndex с помощью set_index, изменить его на unstack и отсортировать второй уровень MultiIndex in columns по sort_index.Последнее сгладьте его на list comprehension с reset_index:

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 s в отдельной первой колонке:

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    
...