Python 从带有字符串的.txt文件创建矩阵

Python 从带有字符串的.txt文件创建矩阵,python,string,file,matrix,Python,String,File,Matrix,我需要从一个.txt文件创建一个矩阵,我遇到的问题是.txt文件有很多信息(可能没有那么多,但我是编程新手,所以我在处理它时有问题)。。。该文件包含: 客户号 名字 姓 年龄 单身或已婚(男或女) 性别(男或女) 喜爱的动物 像这样: 1 James Gordon 35 M M Dog ... 75 Julius Harrison 48 S M Cat 我设法阅读了文件,为每个人创建了一个列表,但还需要计算平均年龄、性别。。。 我不知道如何把每一个元素分开,这样我就可以计算了。 这是到目前

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

  • 客户号
  • 名字
  • 年龄
  • 单身或已婚(男或女)
  • 性别(男或女)
  • 喜爱的动物
像这样:

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())

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

e、 g.平均年龄

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

由于已经创建了二维列表,因此可以使用X和Y坐标简单地访问元素。例如,要计算他们的平均年龄,可以将每个人的子列表的第四个元素相加。以下页面提供了几种方法:


根据您对矩阵感兴趣的内容,将所有内容放入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])
如果你想计算你有多少男性,你可以在性别栏中计算你有多少Ms

male_no = len(np.where(matrix[:,5] == 'M'))
然而,一种更好的计数物品的方法,特别是对于动物,如果你可能有超过1-2个选项,你可以使用收集包中的
计数器

from collections import Counter

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