Файл CSV для Jupyter Notebook - Как удалить данные, отображаемые в столбце индекса? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть CSV-файлы, которые содержат 6 столбцов записанных данных (легко десятки тысяч строк), включая индекс в 3-м столбце (заголовок «o_idx»). Этот индекс обычно увеличивается на +1 в каждой строке, но есть исключения. Я хотел бы удалить или игнорировать все данные до, но не включая, второй экземпляр, где индекс меньше, чем в предыдущей строке. Я подумал об использовании счетчика, который увеличивается каждый раз, когда индекс падает в значении (порядка от 400 до 600 пунктов ниже), а затем начинает копировать данные в новый CSV-файл. Я также рассмотрел создание нового столбца, содержащего вычисляемое значение (предыдущее значение индекса, вычтенное из текущего индекса), которое должно быть 1, за исключением отмеченного, и использование второго отрицательного значения для начала. Как только я вначале преодолею ненужные данные, я построю пару столбцов вместе (график рассеяния xy, который у меня уже запущен). Пример данных из строк 8622-8625 в одном файле CSV, показанном ниже, обратите внимание, что индекс падает с 8213 до 7780, затем продолжает увеличиваться +1:

1530,10155,8212,15001,1570, -215

1530,102,8213,15000,1570, -212

1509,10155,7780,15000,1780, -211

1509,10077,7781,15001,1790, -210

Редактировать: добавить фрагмент кода - обратите внимание, что это не пытается запрошенную функцию - это то, что этот новичок ie надеется на руководство здесь.

import sys
import csv
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# file name and location
logdir = 'data/4-30-20'
logfile = logdir+'/'+'filename.CSV'

# metrics:
gaps = 0             # Number of gaps
skips = 0            # Number of skipped lines (total)
largestskip = 0      # Largest number of skipped lines
largestskiploc = 0   # Line number of largest skip
sessions = 0         # Number of detected sessions (blank row followed by header row)
rows = 0             # Lines processed

# series
pts = []
i_ld = []
i_acc = []
o_idx = []
o_ld = []
o_pos = []
o_vel = []

# Extra debugging output--be careful turning this on for
# very large datasets
DEBUG = False      # Turns output on/off
skipthreshold = 10 # size of skip to show

# Display processed output after parsing file
def printResults():
    avgskips = 0
    if( gaps > 0 ):
        avgskips = round((skips/gaps),2)



# File parsing code
with open( logfile, newline='') as csvfile:
    # The first line of the file is blank, start
    # with one session and skip to the header line
    sessions += 1
    csvfile.seek(0)  # starting at beginning of file...
    next(csvfile)    # ...skip blank line

    logreader = csv.DictReader(csvfile, delimiter=',')

    prevIndex = 0
    nextIndex = 0
    for line in logreader:
        # handle startup gap
        if( rows == 0 ):
            prevIndex = int(line['o_idx'])

        rows += 1
        pts.append(rows)

        # detect whether a new session occurs by 
        # capturing a header row
        if(line['o_idx'] == 'o_idx'):
            sessions += 1
            prevIndex = 0
            nextIndex = 0
            next(csvfile) # skip header row

        else:
            nextIndex = int(line['o_idx'])
            diff = nextIndex - prevIndex - 1

            i_ld.append(float(line['i_ld']))
            i_acc.append(float(line['i_acc']))
            o_idx.append(int(line['o_idx']))
            o_ld.append(float(line['o_ld']))
            o_pos.append(float(line['o_pos']))
            o_vel.append(float(line['o_vel']))

            # process gaps and skips
            if((diff > 0) and (prevIndex != 5)):
                gaps += 1
                skips += diff
                if(diff > largestskip):
                    largestskip = diff
                    largestskiploc = rows

                # NOTE: be careful turning this on for very large datasets
                if((DEBUG) and (diff > skipthreshold)):
                    print(str(prevIndex) + ' -> ' + line['o_idx'] + '; diff: ' + str(diff))

            prevIndex = nextIndex

    printResults()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...