Python-CSV-将每行数字排列成元组
我是Python的新手,但我正在学习。我的任务是以以下格式获取CSV数据(2500行)(因为我们不知道如何在Excel中执行此操作): 并生成一个CSV,其中包含您可以从每行获得的所有数字排列的平均值(最少3个) i、 e 上面的3841/1将生成{4,3,1}的元组,平均值为2.7 3402/1以上将产生{4,3,1}、{4,3,1,5}、{3,1,5}、{4,1,5}等元组,平均值为2.7、3.3、3、3.3等 我绞尽脑汁想办法做到这一点,因为我还需要知道每一个平均数,它包含了多少个元组中的数字,即{4,3,1}将产生2.7的平均数,该元组的数字计数是3 基本上,我想要制作的是:Python-CSV-将每行数字排列成元组,python,Python,我是Python的新手,但我正在学习。我的任务是以以下格式获取CSV数据(2500行)(因为我们不知道如何在Excel中执行此操作): 并生成一个CSV,其中包含您可以从每行获得的所有数字排列的平均值(最少3个) i、 e 上面的3841/1将生成{4,3,1}的元组,平均值为2.7 3402/1以上将产生{4,3,1}、{4,3,1,5}、{3,1,5}、{4,1,5}等元组,平均值为2.7、3.3、3、3.3等 我绞尽脑汁想办法做到这一点,因为我还需要知道每一个平均数,它包含了多少个元组中的
RefNumber Avg 1 Avg 2 Avg 3 Avg 4 Avg 5
3841/1 2.7
3402/1 2.7 3.3 3 3.5
但我想,为了显示元组中的数字计数,我可以运行它9次(最多有12次评论),然后将每个数据表放在自己的选项卡上
从技术上讲,我还需要每个元组的标准偏差和分数范围,但这已经远远超过了我的专业知识,所以我想我可以放弃它,或者手动完成
您知道从哪里开始吗?您可以使用csv模块读取csv并提取数据,使用itertools模块获取所有组合。看看它是否能完成任务。另外,我保留了平均值,但我看到您只使用了1个小数点,通过对结果进行四舍五入可以很容易地得到。我想你现在可以保存结果了
from itertools import combinations as cb
import csv
with open("test.csv") as f:
reader=csv.reader(f)
next(reader, None) # skip header
data=[filter(None,i) for i in reader]
def avgg(x):
ll=[float(i) for i in x[1:]] #take review no and convert to float
n=len(ll)
avg_list=[x[0]] #start result list with ref no.
for i in range(3,n+1):
for j in cb(ll,i):
# print(j) #see the combination
avg_list.append(sum(j)/i)
return avg_list
for x in data:
print(avgg(x))
您可以使用csv模块读取csv并提取数据,使用itertools模块获取所有组合。看看它是否能完成任务。另外,我保留了平均值,但我看到您只使用了1个小数点,通过对结果进行四舍五入可以很容易地得到。我想你现在可以保存结果了
from itertools import combinations as cb
import csv
with open("test.csv") as f:
reader=csv.reader(f)
next(reader, None) # skip header
data=[filter(None,i) for i in reader]
def avgg(x):
ll=[float(i) for i in x[1:]] #take review no and convert to float
n=len(ll)
avg_list=[x[0]] #start result list with ref no.
for i in range(3,n+1):
for j in cb(ll,i):
# print(j) #see the combination
avg_list.append(sum(j)/i)
return avg_list
for x in data:
print(avgg(x))
我对最后一个答案投了赞成票,但我想我给大家展示了一个例子,它将所有内容都保存在数据框架中
data = """RefNumber, Reviewer 1, Reviewer 2,Reviewer 3,Reviewer 4,Reviewer 5
9676/2,6,3,2,,
0526/4,6,3,1,5,1
1842/1,5,3,1,5,
2693/3,5,5,1,2,
2515/1,6,3,1,5,3
2987/1,4,1,3,,
3841/1,4,3,1,,
3402/1,4,3,1,5,
"""
import pandas
import itertools
import StringIO
import numpy
buffer = StringIO.StringIO(data)
df = pandas.read_csv(buffer, index_col=0)
# EVERYTHING ABOVE IS MOSTLY SETUP CODE FOR THE EXAMPLE
def get_combos(items, lower_bound=3):
"""
Return all combinations of values of size lower_bound
for items
"""
usable = items.dropna()
combos = list()
n_combos = range(lower_bound, len(usable) + 1)
for r in n_combos:
combos += list(itertools.combinations(usable, r))
return combos
df['combos'] = df.apply(get_combos, axis=1)
df['means'] = df['combos'].map(lambda items: [numpy.mean(x) for x in items])
我对最后一个答案投了赞成票,但我想我给大家展示了一个例子,它将所有内容都保存在数据框架中
data = """RefNumber, Reviewer 1, Reviewer 2,Reviewer 3,Reviewer 4,Reviewer 5
9676/2,6,3,2,,
0526/4,6,3,1,5,1
1842/1,5,3,1,5,
2693/3,5,5,1,2,
2515/1,6,3,1,5,3
2987/1,4,1,3,,
3841/1,4,3,1,,
3402/1,4,3,1,5,
"""
import pandas
import itertools
import StringIO
import numpy
buffer = StringIO.StringIO(data)
df = pandas.read_csv(buffer, index_col=0)
# EVERYTHING ABOVE IS MOSTLY SETUP CODE FOR THE EXAMPLE
def get_combos(items, lower_bound=3):
"""
Return all combinations of values of size lower_bound
for items
"""
usable = items.dropna()
combos = list()
n_combos = range(lower_bound, len(usable) + 1)
for r in n_combos:
combos += list(itertools.combinations(usable, r))
return combos
df['combos'] = df.apply(get_combos, axis=1)
df['means'] = df['combos'].map(lambda items: [numpy.mean(x) for x in items])
关于子集生成的相关问答:
子集
比置换
更合适。置换集的平均值是常量。从读取数据开始,例如,使用子集是否有效?我认为一个子集只会产生该行上所有数字的集合,也就是说,如果该行包含8个数字,那么它将是8个数字的子集,而我想要3和8之间的所有组合?啊,是的,我不想要重复,即{4,3,1}与{1,3,4}相同,所以我只想要其中一个。嗯,回到绘图板上:/确切地说,这是一个组合(集合)但两个排列(元素的顺序不同)。我认为子集
比排列
更合适。置换集的平均值是常量。从读取数据开始,例如,使用子集是否有效?我认为一个子集只会产生该行上所有数字的集合,也就是说,如果该行包含8个数字,那么它将是8个数字的子集,而我想要3和8之间的所有组合?啊,是的,我不想要重复,即{4,3,1}与{1,3,4}相同,所以我只想要其中一个。嗯,回到绘图板上:/确切地说,这是一个组合(集合)但两个排列(元素的顺序不同)。非常感谢您,这非常有效!我需要想办法知道哪些数字适用于元组中的多少个数字,但我想我可以在for循环中添加一些文本!:)。。。。。老实说,我对你感激不尽。我本来打算花一两个星期来做这个!不用客气,现在我想你可以很容易地从这些组合中得到标准偏差和其他结果。非常感谢你,这非常有效!我需要想办法知道哪些数字适用于元组中的多少个数字,但我想我可以在for循环中添加一些文本!:)。。。。。老实说,我对你感激不尽。我本来打算花一两个星期来做这个!不客气,现在我想你可以很容易地从组合中得到标准偏差和其他结果。非常感谢链接:)非常感谢链接:)