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
谢谢你这么快的回复。我会尝试尝试你的建议,并向你汇报。