首页 > 解决方案 > 没有 Pandas 的 CSV 分组

问题描述

我想将数据分组到一个.csv文件中。我的数据如下:

code,balance
CN,999.99
CN,1.01
LS,177.77
LS,69.42
LA,200.43
WO,100

我想按代码对项目进行分组并总结类似代码的余额。期望的输出是:

code,blance
CN,1001
LS,247.19
...

我最初Pandas用于此任务,但没有可用于将该库放在服务器上的包。

mydata = pd.read_csv('./tmp/temp.csv')
out = mydata.groupby('code').sum()

解决方案最好与Python 2.6. 如果这是重复的,我很抱歉,其他帖子似乎分组不同。

我也想避免这样做 -

if code = x
    add balance to x_total

- 一种方式

我的解决方案:

def groupit():
    groups = defaultdict(list)
    with open('tmp.csv') as fd:
        reader = csv.DictReader(fd)
        for row in reader:
            groups[row['code']].append(float(row['balance.']))
    total={key:sum(groups[key]) for key in groups}
    total=str(total)
    total=total.replace(' ','')
    total=total.replace('{','')
    total=total.replace('}','')
    total=total.replace("'",'')
    total=total.replace(',','\n')
    total=total.replace(':',',')

    outfile = open('out.csv','w+')
    outfile.write('code,balance\n')
    outfile.write(total)

标签: pythonpython-2.x

解决方案


蟒蛇> 2.6:

from collections import defaultdict
import csv

groups = defaultdict(list)
with open('text.txt') as fd:
    reader = csv.DictReader(fd)
    for row in reader:
        groups[row['code']].append(float(row['balance']))

totals = {key: sum(groups[key]) for key in groups}
print(totals)

这输出:

{'CN': 1001.0, 'LS': 247.19, 'LA': 200.43, 'WO': 100.0}

蟒蛇= 2.6:

from collections import defaultdict
import csv

groups = defaultdict(list)
with open('text.txt') as fd:
    reader = csv.DictReader(fd)
    for row in reader:
        groups[row['code']].append(float(row['balance']))

totals = dict((key, sum(groups[key])) for key in groups)
print(totals)

推荐阅读