【问题标题】:How to filter my CSV results using Python如何使用 Python 过滤我的 CSV 结果
【发布时间】:2018-02-20 07:54:26
【问题描述】:

我有一个 csv 文件,其中有如下列:

Source Rack  Switch Label/ID     Switch no  Switch Port    
    1            Hostname1        Switch1         1

其中包含大约 100 个值。我的目标是过滤标签并查看使用了多少端口。 除此之外,获取交换机使用的端口数的计数值。

使用 CSVreader 我在 python 中获取值,但我一直在尝试过滤它们。 请提出一种方法来完成这项工作。

谢谢!

import pandas as pd
import csv
import  numpy
import matplotlib

#import datetime
#import pandas.io.data


data_df = pd.read_csv('patchingwlan.csv',index_col = 1)
data_df.filter(items=['Hostname','Switch Port'])
print(data_df.head())

【问题讨论】:

  • 请展示您所做的尝试
  • 像过滤其他序列一样过滤它们
  • 你试过熊猫吗?
  • 这实际上不是 CSV 文件,CSV 表示逗号分隔值,通用类型将是 DSV(分隔符分隔值)。你的领域是如何分开的?通过任意数量的空格?这看起来更像是人类可编辑的文件,而不是计算机可编辑的文件。
  • @Adirio 我只是举了一个我的文件的例子。我目前正在使用 CSV 文件。

标签: python pandas csv networking


【解决方案1】:

如果我理解正确,你想要这样的东西:

import pandas as pd
pd.set_option("display.width", 300)

# Test input data
df = pd.DataFrame({
    "label": ["hostname1", "hostname1", "hostname2", "hostname2"],
    "switch_no": ["Switch1", "Switch1", "Switch1", "Switch2"],
    "switch_port": [1, 1, 2, 3]
})
print df

# Count ports per label and ports per switch_no (unique and total, depending on what you want)
df["unique_ports_per_label"] = df.groupby("label")["switch_port"].transform("nunique")
df["ports_per_label"] = df.groupby("label")["switch_port"].transform(len)
df["unique_ports_per_switch"] = df.groupby("switch_no")["switch_port"].transform("nunique")
df["ports_per_switch"] = df.groupby("switch_no")["switch_port"].transform(len)
print df

结果:

       label switch_no  switch_port
0  hostname1   Switch1            1
1  hostname1   Switch1            1
2  hostname2   Switch1            2
3  hostname2   Switch2            3

之后:

       label switch_no  switch_port  unique_ports_per_label  ports_per_label  unique_ports_per_switch  ports_per_switch
0  hostname1   Switch1            1                       1                2                        2                 3
1  hostname1   Switch1            1                       1                2                        2                 3
2  hostname2   Switch1            2                       2                2                        2                 3
3  hostname2   Switch2            3                       2                2                        1                 1

【讨论】:

  • 嗨,是的,这与我想要的类似,但我有很多领域。 4 张 excel 表格,大约 300 行字段。所以我把它转换成一个csv,不可能把它列出来那么我怎么能通过调用csv来完成呢?
  • 是的,我的df 只是为了给我一些工作。您可以使用自己的df,因为它在您的代码中:data_df = pd.read_csv('patchingwlan.csv',index_col = 1)。只要您的数据格式相同,输入的大小就没有区别。
  • 这段代码正是我想要的格式,但你能指导我如何从 csv 文件中提取信息吗?并将其写回 csv 文件?
  • 另外,当我运行我的代码时,我得到一个 KeyError。怎么解决?
  • 老实说,你真的很难提供帮助。当有人要求输出时,请发布实际输出,不要只是描述它。发布实际代码/输出/错误消息如此重要的原因是为了检测您可能遗漏的细微之处。在这种情况下,您告诉我的内容与 pandas 告诉您的内容之间似乎存在差异。您告诉我在您的数据中有一个名为“Switch Label/ID”的列,但 pandas 告诉您没有。请贴出list(df.columns)的实际输出。
猜你喜欢
  • 2013-07-19
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
相关资源
最近更新 更多