Как построить фрейм данных из необработанных данных из файла CSV - PullRequest
0 голосов
/ 20 апреля 2020

В настоящее время я изучаю среду python для обработки данных датчиков.

У меня есть плата с 32 датчиками, считывающими температуру. По следующей ссылке вы можете найти выдержку из необработанных данных: https://5e86ea3db5a86.htmlsave.net/

Я пытаюсь построить фрейм данных, сгруппированный по дате, из моего файла CSV, используя pandas ( см. потенциальную структуру таблицы https://docs.google.com/spreadsheets/d/1zpDI7tp4nSn8-Hm3T_xd4Xz7MV6VDGcWGxwNO-8S0-s/edit?usp=sharing

До сих пор я прочитал файл данных в pandas и удалил все безымянные столбцы. Я борюсь с созданием Идентификатор датчика столбца, который должен содержать 32 идентификатора датчика и температуру столбца.

Как мне пропустить oop через этот CSV-файл, чтобы создать 3 столбца (дата, идентификатор датчика и температура)?

Спасибо за помощь

1 Ответ

0 голосов
/ 20 апреля 2020

Похоже, что первый элемент в каждой строке - это дата, затем есть пары идентификатора и значения датчика, а затем пустое значение, которое мы можем исключить. Если это так, то должно работать следующее. Если нет, попробуйте изменить код в соответствии с вашими целями.

data = []

with open('filename.txt', 'r') as f:
    for line in f:
        # the if excludes empty strings
        parts = [part for part in line.split(',') if part]

        # this gets the date in a format that pandas can recognize
        # you can omit the replace operations if not needed
        sensor_date = parts[0].strip().replace('[', '').replace(']', '')

        # the rest of the list are the parings of sensor and reading
        sensor_readings = parts[1:]

        # this uses list slicing to iterate over even and odd elements in list
        # ::2 means every second item starting with zero, which are evens
        # 1::2 means every second item starting with one, which are odds
        for sensor, reading in zip(sensor_readings[::2], sensor_readings[1::2]):
            data.append({'sensor_date': sensor_date, 
                         'sensor': sensor, 
                         'reading': reading})

pd.DataFrame(data)

Используя ваши образцы данных, я получил следующее:

=== Output: ===
Out[64]:
                      sensor_date            sensor  reading
0    Tue Jul 02 16:35:22.782 2019  28C037080B000089  16.8750
1    Tue Jul 02 16:35:22.782 2019  284846080B000062  17.0000
2    Tue Jul 02 16:35:22.782 2019  28A4BA070B00002B  16.8750
3    Tue Jul 02 16:35:22.782 2019  28D4E3070B0000D5  16.9375
4    Tue Jul 02 16:35:22.782 2019  28A21E080B00002F  17.0000
..                            ...               ...      ...
...