【问题标题】:Organize data in CSV into multiple lists in Python 3在 Python 3 中将 CSV 中的数据组织到多个列表中
【发布时间】:2017-10-18 06:22:15
【问题描述】:

我正在处理一个包含两列的大型 CSV 文件 - IP 地址和组名。下面是一个示例数据:

ip          group
192.168.1.1 A
192.168.1.2 B
192.168.1.3 C
192.168.1.4 A
192.168.1.5 B
192.168.1.6 C

我需要根据组名称将数据组织到单独的 IP 列表中。像这样的东西:sorted_data = (A, B, C), 在哪里 A = (192.168.1.1, 192.168.1.4), B = (192.168.1.2, 192.168.1.5) 等等。

整个文件大约有 10K 条记录,其中包含大约 20 个唯一组。请帮忙!

【问题讨论】:

  • 你试过什么?它必须是纯python还是可以使用pandas
  • Pandas 有点让我头疼,但如果这能让它变得更容易,我完全赞成。我正在努力学习。
  • 获取 KeyError:_get_grouper 中的“组”。知道为什么会这样>
  • @user1781482 是关于熊猫解决方案的吗?您的列可能有错误?打印df.columns 并将输出粘贴到此处。另外,请ping我,以便我看到您的评论。使用@cᴏʟᴅsᴘᴇᴇᴅ 这样做。
  • @cᴏʟᴅsᴘᴇᴇᴅ 这是来自 df.columns Index(['ip,group'], dtype='object')的打印件

标签: python python-3.x csv


【解决方案1】:

如果您愿意使用pandas(正如您在评论中指出的那样),您会这样做:

import pandas as pd

df = pd.read_csv('file.csv', sep=',')
dct = df.groupby('group').ip.apply(lambda x: x.tolist()).to_dict()

print(dct)
{'A': ['192.168.1.1', '192.168.1.4'],
 'B': ['192.168.1.2', '192.168.1.5'],
 'C': ['192.168.1.3', '192.168.1.6']}

访问dct 的值以按组获取您的 IP 列表。

【讨论】:

    【解决方案2】:

    使用经典的re.split 你可以这样做:

    import re
    
    data="ip\tgroup\n'192.168.178.1'\tA\n'192.168.178.2'\tB\n'192.168.178.3'\tC\n'192.168.178.4'\tD\n'192.168.178.5'\tE\n'192.168.178.6'\tA\n"
    
    lines=re.split('\n',data)[1:-1]
    sorted_data={}
    for line in lines:
      splt=re.split('\t',line)
      ip,group=splt[0],splt[1]
      try:
        sorted_data[group].append(ip)
      except KeyError:
        sorted_data[group]=[ip]
    print(sorted_data)
    

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 2023-03-16
      • 2013-08-18
      • 2016-03-14
      • 2016-06-19
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      相关资源
      最近更新 更多