Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中转换数据表格式_Python_Numpy - Fatal编程技术网

在python中转换数据表格式

在python中转换数据表格式,python,numpy,Python,Numpy,假设我有一个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)也是未知的,但变量的顺序总是相同的。我正在寻找一种更聪明的转换方式,而不是循环。有内置的功能吗 没有其他内置方法,但您可以使用dict进行分组: from

假设我有一个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)也是未知的,但变量的顺序总是相同的。我正在寻找一种更聪明的转换方式,而不是循环。有内置的功能吗

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

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']
如果希望输出对齐,可以执行以下操作

如果要维护订单,请使用OrderedICT:

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'])])

任何内置将使用循环。不