如何用Python将文本文件中的数据读入数组

2024-05-15 14:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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)

是这样吗?


Tags: and数据方法soon格式line步骤
3条回答

使用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]])

您可以使用:

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

而不是有多个数组abc。。。您可以将数据存储为数组数组(二维数组)。例如:

[[2104,3,399900],
 [1600,3,329900],
 [2400,3,369000]...]

这样就不必处理动态命名数组的问题。如何存储数据,即长度为n的3*数组或长度为3的n*数组取决于您。我更喜欢第二种方式。要将数据读入数组,您应该使用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)

其中,i[0]中的0指定每个列表中的第一个元素。请注意,此代码使用列表理解,如果您愿意,可以进一步了解in this post

此外,此代码将数组中的值存储为字符串,因此在部分中强制转换为int以获取平均值。如果要将数据存储为int直接编辑文件读取部分中的部分:

array = [[int(j) for j in i.split(",")] for i in tmp]

相关问题 更多 >