如何使用Python

时间:2017-02-22 14:12:08

标签: python list

我手头有一些存储在文本文件中的数据有点麻烦,可以使用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)

这是对的吗?

4 个答案:

答案 0 :(得分:2)

您可以将数据存储为数组(二维数组),而不是拥有多个数组docker-compose.yamlab。例如:

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