我收到一个.txt数据文件:
1,2,3,0,0
1,0,4,5,0
1,1,1,1,1
3,4,5,6,0
1,0,1,0,3
3,3,4,0,0
我的目标是计算给定数据的列的最小值,最大值,平均值,范围,中位数,并将其写入输出.txt文件。
我接近这个问题的逻辑如下
步骤1)阅读数据
infile = open("Data.txt", "r")
tempLine = infile.readline()
while tempLine:
print(tempLine.split(','))
tempLine = infile.readline()
显然它并不完美但是这个想法是可以通过这个来读取数据......
步骤2)将数据存储到相应的列表变量中? row1,row2,... row6
步骤3)将上面的所有列表合并为一个,给出这样的最终列表...
flist =[[1,2,3,0,0],[1,0,4,5,0],[1,1,1,1,1],[3,4,5,6,0],[1,0,1,0,3],[3,3,4,0,0]]
步骤4)使用嵌套for循环,单独访问元素并将它们存储到列表变量
中 col1, col2, col3, ... , col5
步骤5)计算min,max等并写入输出文件
我的问题是,凭借我对计算机科学和python的初学者知识,这种逻辑效率低下,是否可能有更简单,更好的逻辑来解决这个问题?
我的主要问题可能是第2步到第5步。其余的我知道该怎么做。
任何建议都会有所帮助!
答案 0 :(得分:1)
要获取数据,我会这样:
from statistics import median
infile = open("Data.txt", "r")
rows = [line.split(',') for line in infile.readlines()]
for row in rows:
minRow = min(row)
maxRow = max(row)
avgRow = sum(row) / len(row)
rangeRow = maxRow - minRow
medianRow = median(row)
#then write the data to the output file
答案 1 :(得分:1)
尝试numpy。 Numpy库在处理列表中的嵌套列表时提供快速选项,或简称为矩阵。
要使用numpy,您必须在代码的开头import numpy
。
numpy.matrix(1,2,3,0,0;1,0,4,5,0;....;3,3,4,0,0)
会给你
flist =[[1,2,3,0,0],[1,0,4,5,0],[1,1,1,1,1],[3,4,5,6,0],[1,0,1,0,3],[3,3,4,0,0]]
直接蝙蝠。
此外,您可以通过轴(在本例中为行)查看并轻松获取平均值,最小值,最大值
max([axis, out]) Return the maximum value along an axis.
mean([axis, dtype, out]) Returns the average of the matrix elements along the given axis.
min([axis, out]) Return the minimum value along an axis.
这是来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html,这是一个numpy文档,所以如需更多信息,请阅读numpy文档。
答案 2 :(得分:0)
您可以使用pandas库(http://pandas.pydata.org/)
以下代码对我有用:
import pandas as pd
df = pd.read_csv('data.txt',header=None)
somestats = df.describe()
somestats.to_csv('dataOut.txt')
答案 3 :(得分:0)
如果有人好奇,我就是这样做的
import numpy
infile = open("Data1.txt", "r")
outfile = open("ColStats.txt", "w")
oMat = numpy.loadtxt(infile)
tMat = numpy.transpose(oMat) #Create new matrix where Columns of oMat becomes rows and rows become columns
#print(tMat)
for x in range (5):
tempM = tMat[x]
mn = min(tempM)
mx = max(tempM)
avg = sum(tempM)/6.0
rng = mx - mn
median = numpy.median(tempM)
out = ("[{} {} {} {} {}]".format(mn, mx, avg, rng, median))
outfile.write(out + '\n')
infile.close()
outfile.close()
#print(tMat)