【问题标题】:How can I turn the rows of a csv file into a list of objects?如何将 csv 文件的行转换为对象列表?
【发布时间】:2019-11-20 09:09:07
【问题描述】:

我正在处理患者数据。我将患者数据存储在 CSV 文件中。每排都是一个新病人,有数百名病人。我想访问患者作为列表的发生率。例如,我的患者列表的索引 0 将输出具有以下属性的患者对象:

{ first: 'Zakariah', 最后:'Siyaji', 年龄:21 }

等等。以下是我正在编写的代码,尽管我看不到如何在不手动初始化每个对象的情况下生成许多对象。考虑到有数百名患者,这是非常不切实际的。

import ASD as asd

class Patient:
    mrn = 0
    first = '' 
    last = '' 
    gender = 0
    smoker = 0
    bmi = 0
    asa = 0 
    cci = 0
    dob = '' 
    dos = '' 
    age = 0

    def setData(self, mrn, first, last, gender, smoker, bmi, asa, cci, dob, dos, age):
        self.mrn = mrn
        self.first = first
        self.last = last
        self.gender = gender
        self.smoker = smoker
        self.bmi = bmi
        self.asa = asa
        self.cci = cci
        self.dob = dob
        self.dos = dos
        self.age = age

    def showData(self):
        print("MRN\t:",self.mrn)
        print("First\t:", self.first)
        print("Last\t:", self.last)
        print("Gender\t:", self.gender)
        print("Smoker\t:", self.smoker)
        print("BMI\t:",self.bmi)
        print("ASA\t:", self.asa)
        print("CCI\t:", self.cci)
        print("DOB\t:", self.dob)
        print("DOS\t:", self.dos)
        print("Age\t:", self.age)

def main():

    p1 = Patient()
    p1.setData(asd.file1['MRN'][0],
               asd.file1['First'][0],
               asd.file1['Last'][0],
               asd.file1['Female'][0],
               asd.file1['Smoker'][0],
               asd.file1['BMI'][0],
               asd.file1['ASA'][0],
               asd.file1['CCI'][0],
               asd.file1['DOB'][0],
               asd.file1['DOS'][0],
               asd.file1['Age'][0])
    p1.showData()

if __name__ == '__main__':
    main()

【问题讨论】:

  • 您能否在问题中包含ASD 的定义

标签: python class dictionary object


【解决方案1】:

您可以简单地导入 pandas 并读取您的 CSV 文件并访问患者的信息。

import pandas as pd
patients = pd.read_csv("patients.csv")

# To access information
patients.loc[0] #or patients.iloc[0]

【讨论】:

  • 好吧,我在访问数据方面没有任何问题,我在将这些行转换为对象时遇到了问题。
【解决方案2】:

csv 模块支持从 csv 文件读取。如果你想做复杂的数据插值,那么当然有 pandas。假设它是一个简单的操作,它应该看起来像这样,

import csv

with open(filename, 'r') as stream:
  reader = csv.DictReader(stream)
  count == 0
  for row in reader:
    if count != 0 # skip the header, or do something here
    p = Patient(row["mrn"], row["first"], row["last"], row["gender"], row["smoker"], row["bmi"], row["asa"], row["cci"], row["dob"], row["dos"], row["age"])
    print(p)
    count += 1

我还看到您的患者定义类不遵循惯用的 python。可以通过以下方式将其重写为更加 Pythonic。

class Patient:
   def __init___(self, mrn=None, first=None, last=None, gender=None, smoker=None, bmi=None, asa=None, cci=None, dob=None, dos=None, age=None)
     self.mrn = mrn
     self.first = first
     self.last = last
     self.gender = gender
     self.smoker = smoker
     self.bmi = bmi
     self.asa = asa
     self.cci = cci
     self.dob = dob
     self.dos = dos
     self.age = age
def __repr__(self):
    return '''MRN: {}
            First: {}
            ...
            ASA: {}'''.format(self.mrn, self.first,....,self.asa)

由于您的构造函数有许多字段,因此最大的优势之一是您可以使用关键字参数来实例化您的类,并降低将某些字段与其他值混淆的风险。

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2016-09-19
    • 2017-05-11
    相关资源
    最近更新 更多