【问题标题】:data accumulating from csv file using python使用python从csv文件中累积数据
【发布时间】:2018-07-04 19:14:29
【问题描述】:

out_gate,useless_column,in_gate,num_connect
a,u,b,1
a,s,b,3
b,e,a,2
b,l,c,4
c,e,a,5
c,s,b,5
c,s,b,3
c,c,a,4
d,o,c,2
d,l,c,3
d,u,a,1
d,m,b,2

上面显示的是一个给定的示例 csv 文件。首先,我的最终目标是以 csv 文件的形式获得答案,如下所示:

 ,a,b,c,d 
a,0,4,0,0 
b,2,0,4,0 
c,9,8,0,0 
d,1,2,5,0

我正在尝试将每个数据(a,b,c,d)一一匹配到 in_gate 所以,例如当 out_gate 'c'-> in_gate 'b' 时,连接数是 8 和 'c '->'a' 变成 9。

我想用列表(或元组、字典、集合)或集合来解决它。 defaultdict 不使用 Pandas 或 NUMPY,我想要一个也可以应用于许多门(大约 10 到 40)的解决方案。

我知道有一个类似的问题,它帮助了很多,但我在编译时仍然遇到了一些麻烦。最后,有没有办法使用列列表和for循环?

((ex) list1=[a,b,c,d],list2=[b,b,a,c,a,b,b,a,c,c,a,b])

如果有一些与数据无关但最终目标不变的无用列怎么办?

谢谢

【问题讨论】:

标签: python arrays csv


【解决方案1】:

如果我正确理解您的问题,您可以尝试使用嵌套的collections.defaultdict

import csv
from collections import defaultdict

d = defaultdict(lambda : defaultdict(int))

with open('gates.csv') as in_file:
    csv_reader = csv.reader(in_file)
    next(csv_reader)
    for row in csv_reader:
        outs, ins, connect = row
        d[outs][ins] += int(connect)

gates = sorted(d)
for outs in gates:
    print(outs, [d[outs][ins] for ins in gates])

哪些输出:

a [0, 4, 0, 0]
b [2, 0, 4, 0]
c [9, 8, 0, 0]
d [1, 2, 5, 0]

【讨论】:

  • 非常感谢!那么如果目标保持不变并且给定csv文件中的num_connect旁边有一些额外的无用列(与数据无关)怎么办?那么如何更改模块??
  • @진주형 很高兴它有帮助。对于未来的读者,您应该接受并支持对您有帮助的答案。
【解决方案2】:

我会使用计数器来完成这项任务。为了使代码简单,我将从字符串中读取数据。我将让您弄清楚如何以您选择的格式将输出生成为 CSV 文件。

import csv
from collections import Counter

data = '''\
out_gate,in_gate,num_connect
a,b,1
a,b,3
b,a,2
b,c,4
c,a,5
c,b,5
c,b,3
c,a,4
d,c,2
d,c,3
d,a,1
d,b,2
'''.splitlines()

reader = csv.reader(data)
#skip header
next(reader)
# A Counter to accumulate the data
counts = Counter()

# Accumulate the data
for ogate, igate, num in reader:
    counts[ogate, igate] += int(num)

# We could grab the keys from the data, but it's easier to hard-code them
keys = 'abcd'

# Display the accumulated data
for ogate in keys:
    print(ogate, [counts[ogate, igate] for igate in keys])

输出

a [0, 4, 0, 0]
b [2, 0, 4, 0]
c [9, 8, 0, 0]
d [1, 2, 5, 0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多