gpt4 book ai didi

python - 在python中转换数据表格式

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:54 24 4
gpt4 key购买 nike

假设我有一个 python 表,格式如下:

id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 300
id2 V2 400
id2 V3 1

我想转换成这种格式:

id1 100 200 0
id2 300 400 1

V1、V2、V3是变量名,不需要保留。我只需要 ID 和每个变量的值。变量数 (Vs) 也是未知的,但变量的顺序始终相同。我正在寻找一种更智能的转换方式而不是循环方式。有内置函数吗?

最佳答案

没有其他内置方法,但您可以使用字典进行分组:

from collections import defaultdict

d = defaultdict(list)

s = """id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 30
id2 V2 400
id2 V3 1"""

for a, _, c in map(str.split, s.splitlines()):
d[a].append(c)

print(["{},{}".format(k,",".join(v)) for k,v in d.items()]
['id2,30,400,1', 'id1,100,200,0']

如果你想让输出很好地对齐,你可以做类似this的事情。

如果你想维持秩序,使用 OrderedDict:

from collections import OrderedDict

d = OrderedDict()

s = """id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 30
id2 V2 400
id2 V3 1"""

for a, _, c in map(str.split, s.splitlines()):
d.setdefault(a, []).append(c)

如果它在文件中,您可以使用 csv 库解析它:

import  csv
from collections import OrderedDict
d = OrderedDict()

with open("in.txt") as f:
for k, _, v in csv.reader(f, delimiter=" "):
d.setdefault(k, []).append(v)

OrderedDict 输出:

OrderedDict([('id1', ['100', '200', '0']), ('id2', ['30', '400', '1'])])

关于python - 在python中转换数据表格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com