Переформатирование поля файла CSV - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующие данные в файле CSV. Имеет 8 столбцов. Вот данные:

Device,Interface,Description,Average Inbound,Max Inbound,Average Outbound,Max Outbound
Router,Cable0/0/0,,34.13M bps,88.57M bps,26.12M bps,80.39M bps
Router,Cable0/0/0-upstream0,Node1,10.60M bps,16.07M bps,0 bps,0 bps
Router,Cable0/0/0-upstream1,Node1,4.74M bps,13.71M bps,0 bps,0 bps
Router,Cable0/0/0-upstream2,Node1,2.14M bps,10.65M bps,0 bps,0 bps
Router,Cable0/0/0-upstream3,Node1,1.35M bps,8.33M bps,0 bps,0 bps
Router,Cable0/0/1-upstream0,Node2,6.67M bps,7.80M bps,0 bps,0 bps
Router,Cable0/0/1-upstream1,Node2,6.40M bps,8.22M bps,0 bps,0 bps
Router,Cable0/0/1-upstream2,Node2,5.21M bps,8.06M bps,0 bps,0 bps
Router,Cable0/0/1-upstream3,Node2,4.84M bps,7.80M bps,0 bps,0 bps

Мне не нужно ничего делать со столбцом Device или столбцом Max Inbound или Max Outbound. Однако мне нужно иметь возможность суммировать Avg. Inbound и Avg. Outbound для каждого узла (столбец «Описание»).

Так, например, мой сценарий Python должен будет выполнять итерацию по каждой строке, имеющей определенный узел (Node1, Node2 и т. Д.), А затем суммировать эти входящие и исходящие средние. Проблема в том, что в файле CSV есть такие символы мусора, как «M» для Million и «bps» для битов в секунду, прикрепленных к концу значений. Мне нужно удалить эти символы и превратить их в целые числа, прежде чем я смогу выполнить с ними математические вычисления. Говоря о математике, мне также нужно преобразовать эти значения в мегабит в секунду. Любые идеи о лучших подходах будут с благодарностью.

Спасибо за информацию. Код, с которого я начал, это:

import csv
import string
nodes = []
averages = []

with open('csvfile') as csvDataFile:
csvReader = csv.reader(csvDataFile)
for row in csvReader:
    averages.append(row[4])

print averages

Это даст следующий результат:

['Max Inbound', '88.57M bps', '16.07M bps', '13.71M bps', '10.65M bps', 
'8.33M bps', '7.80M bps', '8.22M bps', '8.06M bps', '7.80M bps']

Я мог бы использовать rstrip, как вы упомянули, для конечных символов, таких как M и, возможно, bps, но мне также нужно избавиться от первого элемента в списке «Max Inbound».

Как я могу сначала найти и сопоставить все интерфейсы, которые имеют одинаковое значение, а затем я могу выполнить математические вычисления для этих значений. Например, в столбце «Интерфейс» я хочу найти ВСЕ интерфейсы Cable0 / 0/0 (4 из них), а затем я могу выполнить математические операции со значениями для входящего / исходящего макс.

Можно ли это сделать, используя только модуль CSV и повторно, ИЛИ мне нужно использовать панд? Может кто-нибудь помочь мне разобраться с этим шагом? В приведенном выше примере данных мне нужно получить ТОЛЬКО значения, соответствующие Cable0 / 0/0, и сложить входящий / исходящий. Следующим шагом будет получение значений для Cable0 / 0/1 и т. Д.

Заранее большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 29 июня 2018

Поскольку вы знаете, что ваш заголовок всегда будет включен, вы можете просто нарезать свой список с помощью averages[1:]. Тем не менее, это не очень Pythonic. Я бы предложил использовать следующий код:

with open('csvfile') as csvDataFile:
    csvReader = csv.reader(csvDataFile)
    next(csvReader) # Skips the header row!
    # Write the rest of your code here

Функция next () - это встроенная функция Python, которую можно очень хорошо применять к csv.reader объектам. Если у вас есть несколько заголовков, вы можете последовательно применять функцию next(), чтобы пропустить все эти заголовки.

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