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