Я пытаюсь отсортировать / разделить CSV в Python - PullRequest
1 голос
/ 23 мая 2019

Я получил файл .csv с 18 тысячами строк данных от 11 различных измерительных устройств. Я пытаюсь скопировать / записать файл для каждого измерительного устройства, чтобы я мог построить их позже, получить средние значения проще. Однако, с помощью этого кода, я собрал, скремблировал из учебников YT и веб-источников, единственное, что пишется в этих файлах, это «имена полей» / имена столбцов (какими бы ни были правильные названия для этих вещей. Он просто останавливается после вставки первой строки .csv вместо того, чтобы искать правильное значение в каждой строке и вставлять его в новые файлы .csv

Я попытался использовать цикл for, в котором есть 11 различных условий if / elif, которые, как я думал, будут фильтровать столбец device_id в нужный файл устройства.

import csv
with open('Data.csv', 'r') as Data_puntenOG:
    Data_punten = csv.DictReader(Data_puntenOG)
    for line in Data_punten:
        if line['device_id'] == 'prototype01':
            with open('HS361.csv', 'w') as HS361:        
                csv_HS361 = csv.writer(HS361)
                csv_HS361.writerow(line)
        elif line['device_id'] == "prototype02":
            with open('MinID8.csv', 'w') as MinID8:
                csv_MinID8 = csv.writer(MinID8)
                csv_MinID8.writerow(line)

, а затем еще 9 одинаковых строк elif с разными именами / условиями от prototype03 до prototype12, за исключением 9, потому что этого не было в файле .csv

11 файлов только с первой строкой .csv (Идентификатор, device_id, measurement_type, measurement_value, метка времени) вместо большой кучи строк с данными из файла .csv

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

если вы установили pandas, это прочитает файл и запишет все строки с одинаковым идентификатором «device_id» в отдельный файл с именем «Device_id».

import pandas as pd

df = pd.read_csv('Data.csv')

EDIT:
for id in df['device_id'].unique():
    df[df['device_id'] == id].to_csv(f"{id}.csv")
0 голосов
/ 23 мая 2019

Я думаю, что наиболее удобный способ - использовать pandas 'groupby, потому что он предоставляет как уникальные идентификаторы, так и соответствующие им субкадры данных:

import pandas as pd

df = pd.read_csv('Data.csv')

for id, group in df.groupby('device_id'):
      group.to_csv(f'{id}.csv')
...