python csv 列表比较和添加
python csv list compare and addition
解析和添加客户端数据
Data:
('Client 1', '13.2')
('Client 1', '22.4')
('Client 1', '1.2')
('Client 2', '3.4')
('Client 3', '12.3')
('Client 3', '3.221')
('Client 4', '234.44')
尝试编写正确的循环并添加功能以获得正确的输出。
目标结果:
客户 1:36.8
客户 2:3.4
客户 3:15.521
客户 4:234.44
这是我最终正确列出数据的代码。我从这里去哪里才能得到结果。我尝试了很多不同的循环但都没有成功。
import csv
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
numbers = []
for row in reader:
print(row['Client Name'], row['Earnings'])
您可以使用格式字符串(%.2f 将有 2 位小数)和记录谁赚了多少的字典来解决。
clients = {}
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
numbers = []
for row in reader:
name = row['Client Name']
earnings = float(row['Earnings'])
if name in clients:
clients[name] += earnings
else:
clients[name] = earnings
for client in sorted(clients):
print("%s:%.2f" % (client, clients[client]))
你应该创建一个包含所有客户端的字典,然后检查客户端是否已经在目录中。如果客户不是,则将他们与他们的收入相加。如果他们在其中,则只需将下一个收入添加到他们现有的收入中。
这是我将如何执行此操作的代码。希望这会有所帮助:
clientDirectory = {}
for row in reader:
if row['Client Name'] not in clientDirectory:
clientDirectory[row['Client Name']] = float(row['Earnings'])
else:
[row['Client Name']] += float(row['Earnings'])
for key in clientDirectory.keys():
print("%s %f" %(key, clientDirectory[key]))
您可以使用字典来添加值
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
results = {}
# adding
for row in reader:
# default value for new client
if row['Client Name'] not in results:
results[row['Client Name']] = 0
# add value
results[row['Client Name']] += float(row['Earnings'])
# showing
for name, value in results.items():
print("%s: %s" % (name,value))
但这可能是一个问题 - 字典不必保持顺序,您可以按不同的顺序查看结果。
假设您有这样一个数据文件:
$ cat /tmp/data.csv
'Client 1', '13.2'
'Client 1', '22.4'
'Client 1', '1.2'
'Client 2', '3.4'
'Client 3', '12.3'
'Client 3', '3.221'
'Client 4', '234.44'
您可以使用defaultdict
将文件中的浮点值相加:
from collections import defaultdict
import csv
dd=defaultdict(float)
with open('/tmp/data.csv') as data:
for row in csv.reader(data, quotechar="'", skipinitialspace=True):
dd[row[0]]+=float(row[1])
print '\n'.join(["{}: {}".format(k, dd[k]) for k in sorted(dd)])
打印:
Client 1: 36.8
Client 2: 3.4
Client 3: 15.521
Client 4: 234.44
(我使用的排序仅适用于客户端 1 - 客户端 9;之后你需要一个 natural sort 方法...)
$ cat test.csv
Client 1, 13.2
Client 1, 22.4
Client 1, 1.2
Client 2, 3.4
Client 3, 12.3
Client 3, 3.221
Client 4, 234.44
然后在Python:
from odo import odo
from pandas import DataFrame
clientDF = odo('test.csv', DataFrame)
print clientDF.groupby(['0']).sum()
解析和添加客户端数据
Data:
('Client 1', '13.2')
('Client 1', '22.4')
('Client 1', '1.2')
('Client 2', '3.4')
('Client 3', '12.3')
('Client 3', '3.221')
('Client 4', '234.44')
尝试编写正确的循环并添加功能以获得正确的输出。
目标结果:
客户 1:36.8
客户 2:3.4
客户 3:15.521
客户 4:234.44
这是我最终正确列出数据的代码。我从这里去哪里才能得到结果。我尝试了很多不同的循环但都没有成功。
import csv
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
numbers = []
for row in reader:
print(row['Client Name'], row['Earnings'])
您可以使用格式字符串(%.2f 将有 2 位小数)和记录谁赚了多少的字典来解决。
clients = {}
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
numbers = []
for row in reader:
name = row['Client Name']
earnings = float(row['Earnings'])
if name in clients:
clients[name] += earnings
else:
clients[name] = earnings
for client in sorted(clients):
print("%s:%.2f" % (client, clients[client]))
你应该创建一个包含所有客户端的字典,然后检查客户端是否已经在目录中。如果客户不是,则将他们与他们的收入相加。如果他们在其中,则只需将下一个收入添加到他们现有的收入中。
这是我将如何执行此操作的代码。希望这会有所帮助:
clientDirectory = {}
for row in reader:
if row['Client Name'] not in clientDirectory:
clientDirectory[row['Client Name']] = float(row['Earnings'])
else:
[row['Client Name']] += float(row['Earnings'])
for key in clientDirectory.keys():
print("%s %f" %(key, clientDirectory[key]))
您可以使用字典来添加值
with open('clientdata.csv') as csvfile:
reader = csv.DictReader(csvfile)
results = {}
# adding
for row in reader:
# default value for new client
if row['Client Name'] not in results:
results[row['Client Name']] = 0
# add value
results[row['Client Name']] += float(row['Earnings'])
# showing
for name, value in results.items():
print("%s: %s" % (name,value))
但这可能是一个问题 - 字典不必保持顺序,您可以按不同的顺序查看结果。
假设您有这样一个数据文件:
$ cat /tmp/data.csv
'Client 1', '13.2'
'Client 1', '22.4'
'Client 1', '1.2'
'Client 2', '3.4'
'Client 3', '12.3'
'Client 3', '3.221'
'Client 4', '234.44'
您可以使用defaultdict
将文件中的浮点值相加:
from collections import defaultdict
import csv
dd=defaultdict(float)
with open('/tmp/data.csv') as data:
for row in csv.reader(data, quotechar="'", skipinitialspace=True):
dd[row[0]]+=float(row[1])
print '\n'.join(["{}: {}".format(k, dd[k]) for k in sorted(dd)])
打印:
Client 1: 36.8
Client 2: 3.4
Client 3: 15.521
Client 4: 234.44
(我使用的排序仅适用于客户端 1 - 客户端 9;之后你需要一个 natural sort 方法...)
$ cat test.csv
Client 1, 13.2
Client 1, 22.4
Client 1, 1.2
Client 2, 3.4
Client 3, 12.3
Client 3, 3.221
Client 4, 234.44
然后在Python:
from odo import odo
from pandas import DataFrame
clientDF = odo('test.csv', DataFrame)
print clientDF.groupby(['0']).sum()