将CSV中的数据组织到Python 3中的多个列表中

时间:2017-10-17 18:36:07

标签: python python-3.x csv

我正在使用包含两列的大型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个独特的组。请帮忙!

2 个答案:

答案 0 :(得分:2)

如果您愿意使用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列表。

答案 1 :(得分:0)

使用您可以执行的经典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)

{
  "path": "NodeNameRoot/NodeNameLevel_1/NodeNameLevel_2/NodeNameLevel_3/NodeNameLevel_4",
  "types: "type1/type1/type2/type2/type3",
  "document": {
    ...
  }
}