Python(3.7)CSV按字段值排序/求和

时间:2019-06-17 15:48:44

标签: python

我有一个csv文件(不确定大小),我想阅读并进行一些处理。 这是csv文件的结构:

User, Value
CN,500.00
CN,-250.00
CN,360.00
PT,200.00
PT,230.00
...

我想读取文件并获取第一个字段相同的每一行的总和。 我一直在尝试以下操作,只是试图为第一个字段标识一个值:

with open("Data.csv", newline='') as data:
    reader = csv.reader(data)
    for row in reader:
        if row.startswith('CN'):
            print("heres one")

此操作失败,因为startswith不适用于列表对象。我也尝试过使用readlines()

编辑1:

我目前可以使用排序后的总和打印以下数据框对象:

         Value
User
CN    3587881.89
D        1000.00
KC    1767783.99
REC     12000.00
SB      25000.00
SC    1443039.12
SS          0.00
T     9966998.93
TH    2640009.32
ls        500.00

我使用以下代码获得此输出:

mydata=pd.read_csv('Data.csv')
out = mydata.groupby(['user']).sum()
print(out)

Id现在喜欢能够为该对象编写if语句。像这样:

if out contains User 'CN'
    varX = Value for 'CN'

因为这是现在的数据帧类型,所以我无法为特定用户将Value设置为变量。

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

import pandas as pd
my_data= pd.read_csv('Data.csv')
my_data.group_by('user').sum()

答案 1 :(得分:0)

您可以使用第一行元素:

import csv

with open("Data.csv", newline='') as data:
    reader = csv.reader(data)
    for row in reader:
        if row[0].startswith('CN'):
            print("heres one")

答案 2 :(得分:0)

使用collections.defaultdict

例如:

import csv
from collections import defaultdict 

result = defaultdict(int)
with open(filename, newline='') as data:
    reader = csv.reader(data)
    next(reader)
    for row in reader:
        result[row[0]] += float(row[1])

print(result)

输出

defaultdict(<class 'int'>, {'CN': 610.0, 'PT': 430.0})