gpt4 book ai didi

python - 使用python在CSV中找出给定DOB的月份和年份年龄

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:06 25 4
gpt4 key购买 nike

我对自动生成的 CSV 报告进行了多项调整。我目前被困在需要获取患者的 DOB 并将其转换为以月和年为单位的年龄的部分。原始 CSV 中已经有一个年龄列,我已经想出了如何转换 DOB 列中的数据以找到以天为单位的年龄,但是,我需要能够将其转换为月/年,然后还采用该计算值并替换当前字段中的值。当前字段是手写字符串,没有真正一致的格式。实际的 CSV 大约有 1700 行和 18 列,并使用标准逗号分隔它们,所以我只是为了示例制作一个较短的表格,并使用缩进使其更容易查看:

Last_Name   First_Name   MI   age                 DOB          SSN         visit_date
Stalone Frank P 62yrs 10 months 07-30-1950 123456789 05-02-2013
Astley Richard P 47years3mo 02-06-1966 987654321 05-03-2013

我想要的应该是这样的:

Last_Name   First_Name   MI   Age       DOB          SSN
Stalone Frank P 62y10mo 07-30-1950 123456789
Astley Richard P 47y3mo 02-06-1966 987654321

编辑:我意识到我可以只使用 date.year 和 date.month 来减去年和月,使这些值更容易找到。我现在正在编辑我的代码,当我开始工作时会更新它,但是我在问题的第二部分仍然遇到问题。

到目前为止我的代码:

import re
import csv
import datetime

with open(inputfile.csv','r') as fin, open(outputfile.csv','w') as fout:
reader = csv.DictReader(fin)
fieldnames = reader.fieldnames
writer_clinics = csv.DictWriter(fout, fieldnames, dialect="excel")
writer_clinics.writeheader()

for row in reader:
data = next(reader)
today = datetime.date.today()
DOB = datetime.datetime.strptime(data["DOB"], "%m/%d/%Y").date()
age_y = (today.year - DOB.year)
age_m = (today.month - DOB.month)

if age_m < 0:
age_y = age_y - 1
age_m = age_m + 12

age = str(age_y) + " y " + str(age_m) + " mo "
print (age)

所以,我想弄清楚如何将年龄写入 outputfile.csv 中的正确字段?

更新 2:设法让大部分内容写入,但是,输入文件中的某些字段留空时出现错误。我的老板还希望我确定年龄,具体取决于他的实际约会日期。我当前的代码块:

import re
import csv
import datetime

def getage(visit, dob):
years = visit.year - dob.year
months = visit.month - dob.month
if visit.day < dob.day:
months -= 1
if months < 0:
months += 12
years -= 1
return '%sy%smo'% (years, months)

with open('inputfile.csv','r') as fin, open('outputfile.csv','w') as fout:
reader = csv.DictReader(fin)
writer_clinics = csv.DictWriter(fout, reader.fieldnames, dialect="excel")
writer_clinics.writeheader()

for data in reader:
visit_date = datetime.strptime(data["visit_date"], "%m-%d-%Y").date()
DOB = datetime.datetime.strptime(data["DOB"], "%m-%d-%Y").date()
data["Age"] = getage(visit_date, DOB)
writer_clinics.writerow(data)

最佳答案

您不能将日转换为年和月,因为年和月中的天数不同。您需要自己计算年份和月份的差异。

dob = datetime.datetime.strptime('07-30-1950', '%m-%d-%Y')
now = datetime.datetime.now()
years = now.year - dob.year
months = now.month - dob.month
if now.day < dob.day:
months -= 1
while months < 0:
months += 12
years -= 1
age = '{}y{}mo'.format(years, months)

>>> print age
62y9mo

关于python - 使用python在CSV中找出给定DOB的月份和年份年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com