使用字符串从.txt文件创建矩阵

时间:2015-11-28 23:35:36

标签: python string file matrix

我需要从.txt文件创建一个矩阵,我遇到的问题是.txt文件有很多信息(可能没那么多,但我是编程的新手,所以我遇到了问题用它)...文件有:

  • 客户编号
  • 姓名
  • 姓氏
  • 年龄
  • 单身或已婚(S或M)
  • 性别(男或女)
  • 最喜欢的动物
像这样:

1 James Gordon 35 M M Dog
...
75 Julius Harrison 48 S M Cat

我设法读取文件并为每个人创建一个列表,但是还需要计算年龄,性别的平均值... 我不知道如何分离每个元素,所以我可以做数学。 这是迄今为止的代码。

infile=open("db.txt","r")
list=infile.read()

matrix=[]

raw = []
with open('db.txt','r') as f:
    for line in f:
        raw.append(line.split())

3 个答案:

答案 0 :(得分:0)

您正在使用列表(raw)来保存数据。您可以使用列表索引来访问数据。

e.g。平均年龄

ages = [r[3] for r in raw]
average_age = float(sum(ages))/len(ages)

答案 1 :(得分:0)

由于您已创建了2D列表,因此您只需使用X和Y坐标即可访问这些元素。例如,要计算其年龄的平均值,您可以总结每个人的子列表的第四个元素。以下页面提供了几种方法:

Calculate mean across dimension in a 2D array

答案 2 :(得分:0)

根据您对矩阵感兴趣的内容,将所有内容放在一个numpy数组中可能是一个好主意。您可以更轻松地在任一轴上切片对象,而numpy数组比遍历列表更快。

import numpy as np

# read file and store the file lines in `raw` as you have done above, then
matrix = np.array(raw, dtype=object)
matrix[:,3] = matrix[:,3].astype(int)

average = np.mean(matrix[:,3])

如果您想计算自己拥有的男性人数,可以计算性别列中有多少名女士。

male_no = len(np.where(matrix[:,5] == 'M'))

但是,对于计算物品的更好方法,尤其是对于可能有1-2个以上选项的动物,您可以使用收集包中的Counter

from collections import Counter

gender_count = Counter(matrix[:,5])
for key in gender_count.keys():
    print key, gender_count[key]