Python 导入具有多个ID的数据

Python 导入具有多个ID的数据,python,Python,我需要将一些数据导入服务器。我的问题是数据的格式不太正确。简而言之,它看起来是这样的: ITEMS_DIREC ID | Co-ordinate 1 | 648 2 | 25 2 | 305 2 | 307 2 | 569 3 | 354 3 | 450 3 | 573 4 | 293 4 | 449 5 | 25 5 | 73 1 | 648 2 | 25, 305, 307, 569, 3 | 354, 450, 573, 4 | 293, 449 5

我需要将一些数据导入服务器。我的问题是数据的格式不太正确。简而言之,它看起来是这样的:

ITEMS_DIREC

ID | Co-ordinate
1  | 648
2  | 25
2  | 305
2  | 307
2  | 569
3  | 354
3  | 450
3  | 573
4  | 293
4  | 449
5  | 25
5  | 73
1  | 648
2  | 25, 305, 307, 569, 
3  | 354, 450, 573,
4  | 293, 449
5  | 25, 73
我希望它看起来更像这样:

ITEMS_DIREC

ID | Co-ordinate
1  | 648
2  | 25
2  | 305
2  | 307
2  | 569
3  | 354
3  | 450
3  | 573
4  | 293
4  | 449
5  | 25
5  | 73
1  | 648
2  | 25, 305, 307, 569, 
3  | 354, 450, 573,
4  | 293, 449
5  | 25, 73
这是我必须修改的代码(此代码假定每个ID都是唯一的,因此没有像上面那样的倍数):

所以我得到的印象是,如果我在原始数据上使用这个代码,它不会把多个ID看作是一个。不仅如此,我的数据集相当大(100000+),并且不是每个ID都有相同数量的坐标,所以我不能简单地构造一个矩阵并填充值


有人能在正确的方向上给我一些帮助吗?我对Python一点经验都没有,所以到目前为止我尝试过的所有方法都失败得很惨。

您可以使用
csv.reader
csv.writer
来处理管道分隔的数据和
集合。defaultdict
来累积密钥id的每个值。您可以使用
islice
方便地跳过前几个步骤不需要的行,然后对于最终输出,按id对行进行排序,然后写出它们,后跟逗号分隔的值列表。例如:

import csv
from itertools import islice
from collections import defaultdict

dd = defaultdict(list)
with open('input') as fin:
    pipe_in = csv.reader(fin, delimiter='|')
    for key, val in islice(pipe_in, 3, None):
        dd[key].append(val)

with open('output', 'wb') as fout:
    pipe_out = csv.writer(fout, delimiter='|')
    pipe_out.writerows([k, ', '.join(v)] for k, v in sorted(dd.iteritems()))

# 1|648
# 2|25, 305, 307, 569
# 3|354, 450, 573
# 4|293, 449
# 5|25, 73

谢谢你这么快的回复。我会尝试尝试你的建议,并向你汇报。