【发布时间】:2018-12-08 00:11:21
【问题描述】:
我在 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”表示百万,“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”中的第一项。
如何首先搜索并匹配具有相同值的所有接口,然后对这些值进行数学运算。例如,在 Interface 列中,我想搜索所有 Cable0/0/0 接口(其中 4 个),然后我可以对 Inbound/Outbound max 的值进行数学计算。
这可以仅使用 CSV 模块和 re 来完成,还是我需要使用 pandas?谁能帮我弄清楚这一步?在上面的示例数据中,我只需要获取与 Cable0/0/0 匹配的值并将入站/出站相加。下一步是获取 Cable0/0/1 等的值。
【问题讨论】:
-
你的 Python 脚本在哪里?如果没有真正看到你做了什么,我们无法弄清楚你哪里出错了。另请参阅How to Ask。
-
那里有很多子问题,但首先查看pandas dataframes 可能很有用,它非常适合处理像你这样的混合数据类型。您可以使用
.rstrip删除尾随字符,然后根据需要对您的各个值进行乘法运算。 -
感谢您的意见。我已经用我的起始代码和输出更新了帖子。
标签: python python-2.7 csv