在python中从csv按键查找平均值
我有一个简单的2列csv,需要找到每个键的平均值 即 输入csv在python中从csv按键查找平均值,python,csv,average,Python,Csv,Average,我有一个简单的2列csv,需要找到每个键的平均值 即 输入csv A,2 B,3 A,1 C,2 B,2 D,4 C,2 所需输出 {'A': 1.5, 'B': 2.5, 'C': 2, 'D': 4} 迄今为止的守则: pythoncsvfile = open("data.csv") csv_reader = csv.reader(csvfile, delimiter=',') for row in csv_reader: print (row[0],row[1]) 选
A,2
B,3
A,1
C,2
B,2
D,4
C,2
所需输出
{'A': 1.5, 'B': 2.5, 'C': 2, 'D': 4}
迄今为止的守则:
pythoncsvfile = open("data.csv")
csv_reader = csv.reader(csvfile, delimiter=',')
for row in csv_reader:
print (row[0],row[1])
选项A 使用
csv
import csv
import collections
out = collections.defaultdict(list)
with open('file.csv') as f:
for line in csv.reader(f):
out[line[0]].append(int(line[1]))
for k in out:
out[k] = sum(out[k]) / len(out[k])
print(dict(out))
{'A': 1.5, 'B': 2.5, 'C': 2.0, 'D': 4.0}
选项B 使用
pandas
import pandas as pd
df = pd.read_csv('file.csv', header=None, names=['Key', 'Value'])
out = df.groupby('Key').mean()
print(out.Value.to_dict())
{'A': 1.5, 'B': 2.5, 'C': 2.0, 'D': 4.0}
选项A 使用
csv
import csv
import collections
out = collections.defaultdict(list)
with open('file.csv') as f:
for line in csv.reader(f):
out[line[0]].append(int(line[1]))
for k in out:
out[k] = sum(out[k]) / len(out[k])
print(dict(out))
{'A': 1.5, 'B': 2.5, 'C': 2.0, 'D': 4.0}
选项B 使用
pandas
import pandas as pd
df = pd.read_csv('file.csv', header=None, names=['Key', 'Value'])
out = df.groupby('Key').mean()
print(out.Value.to_dict())
{'A': 1.5, 'B': 2.5, 'C': 2.0, 'D': 4.0}
我认为您可以使用以下代码:
import csv
from collections import OrderedDict
data = OrderedDict()
with open('data.csv', 'rb') as csvfile:
content = csv.reader(csvfile, delimiter=',')
for index, value in content:
if ( not data.has_key(index) ):
#initialize
data[index] = {'times':1, 'total':float(value)}
else:
#index already present
data[index] = {'times': data[index]["times"]+1, 'total':data[index]["total"]+float(value)}
def average(data):
results = OrderedDict()
for index, values in data.iteritems():
results[index] = values["total"]/values["times"]
return results
print average(data)
数据的示例结果:
HTH我认为您可以使用以下代码:
import csv
from collections import OrderedDict
data = OrderedDict()
with open('data.csv', 'rb') as csvfile:
content = csv.reader(csvfile, delimiter=',')
for index, value in content:
if ( not data.has_key(index) ):
#initialize
data[index] = {'times':1, 'total':float(value)}
else:
#index already present
data[index] = {'times': data[index]["times"]+1, 'total':data[index]["total"]+float(value)}
def average(data):
results = OrderedDict()
for index, values in data.iteritems():
results[index] = values["total"]/values["times"]
return results
print average(data)
数据的示例结果:
HTH这是一个好的、明确的问题陈述。现在,试着编写一些代码来实现它。如果您陷入困境,请告诉我们您陷入困境的原因和原因。您是否有
pandas
?您是否考虑过合适的容器数据类型?这是一个很好的、明确的问题陈述。现在,试着编写一些代码来实现它。如果您陷入困境,请告诉我们您陷入困境的原因和原因。您是否有pandas
?您是否考虑过合适的容器数据类型可能是什么?很好的解决方案,但我想知道为什么您将设置为\u index=False
。如果不这样做,则可以说out.Value.to_dict()
以获取请求的格式OP。@JohnZwinck键
列成为索引。我不喜欢那样子。真的,仅此而已p@JohnZwinck但这是个好主意:)谢谢。@cᴏʟᴅsᴘᴇᴇᴅ 谢谢我选择了选项A,效果非常好。@user8420144很高兴我能帮上忙!很好的解决方案,不过我想知道为什么将设置为_index=False
。如果不这样做,则可以说out.Value.to_dict()
以获取请求的格式OP。@JohnZwinck键
列成为索引。我不喜欢那样子。真的,仅此而已p@JohnZwinck但这是个好主意:)谢谢。@cᴏʟᴅsᴘᴇᴇᴅ 谢谢我选择了选项A,效果非常好。@user8420144很高兴我能帮上忙!