我手头有一些存储在文本文件中的数据有点麻烦,可以使用Python进行回归分析。
数据以如下格式存储:
2104,3,399900 1600,3,329900 2400,3,369000 ....
我需要做一些分析,比如找到意思: (2104 + 1600 + ...)/数据数
我认为适当的步骤是将数据存储到数组中。但我不知道如何存储它。我想到了两种方法。第一个是设置3个存储类似
的数组a=[2104 1600 2400 ...] b=[3 3 3 ...] c=[399900 329900 36000 ...]
第二种方式是存储在
中a=[2104 3 399900], b=[1600 3 329900] and so on.
哪一个更好?
另外,如何编写允许数据存储到数组中的代码?我想是这样的:
with open("file.txt", "r") as ins:
array = []
elt.strip(',."\'?!*:') for line in ins:
array.append(line)
这是对的吗?
答案 0 :(得分:2)
您可以将数据存储为数组(二维数组),而不是拥有多个数组docker-compose.yaml
,a
,b
。例如:
c
这样您就不必动态命名数组。如何存储数据,即3 *长度为n或n *长度为3的数组由您决定。我更喜欢第二种方式。要将数据读入数组,您应该使用[[2104,3,399900],
[1600,3,329900],
[2400,3,369000]...]
函数,该函数会将输入拆分为数组。所以在你的情况下:
split()
编辑: 要找到平均值,例如对于每个列表中的第一个元素,您可以执行以下操作:
with open("file.txt", "r") as ins:
tmp = ins.read().split(" ")
array = [i.split(",") for i in tmp]
>>> array
[['2104', '3', '399900'], ['1600', '3', '329900'], ['2400', '3', '369000']]
arraymean = sum([int(i[0]) for i in array]) / len(array)
中的0
指定每个列表中的第一个元素。请注意,此代码使用列表推导,如果您愿意,可以了解有关in this post的更多信息。
此代码还将数组中的值存储为字符串,因此在部件中转换为int以获取均值。如果您想直接将数据存储为i[0]
,只需编辑文件读取部分中的部分:
int
答案 1 :(得分:2)
使用pandas和numpy可以将数据输入数组,如下所示:
In [37]: data = "2104,3,399900 1600,3,329900 2400,3,369000"
In [38]: d = pd.read_csv(StringIO.StringIO(data), sep=',| ', header=None, index_col=None, engine="python")
In [39]: d.values.reshape(3, d.shape[1]/3)
Out[39]:
array([[ 2104, 3, 399900],
[ 1600, 3, 329900],
[ 2400, 3, 369000]])
答案 2 :(得分:2)
您可以使用:
with open('data.txt') as data:
substrings = data.read().split()
values = [map(int, substring.split(',')) for substring in substrings]
average = sum([a for a, b, c in values]) / float(len(values))
print average
使用此data.txt
,:
2104,3,399900 1600,3,329900 2400,3,369000
2105,3,399900 1601,3,329900 2401,3,369000
输出:
2035.16666667
答案 3 :(得分:0)
这是一个没有错误检查的快速解决方案(使用列表推导技术,PEP202)。但是,如果您的文件格式一致,则可以执行以下操作:
import numpy as np
a = np.array([np.array(i.split(",")).astype("float") for i in open("example.txt").read().split(" ")])
你应该打印它吗:
print(a)
print("Mean of column 0: ", np.mean(a[:, 0]))
您将获得以下内容:
[[ 2.10400000e+03 3.00000000e+00 3.99900000e+05]
[ 1.60000000e+03 3.00000000e+00 3.29900000e+05]
[ 2.40000000e+03 3.00000000e+00 3.69000000e+05]]
Mean of column 0: 2034.66666667
请注意,在代码段中,如何将","
指定为三元组内的分隔符,将空格" "
指定为三元组之间的分隔符。这是我用作示例的文件的确切内容:
2104,3,399900 1600,3,329900 2400,3,369000