我正在读取.csv文件,想要从中提取某些值并将它们写入新的result.csv(B)文件。我尝试用代码(A)做这个,这只是部分工作。
在定义中我把我想要最终从我正在阅读的.csv文件中提取匹配值的所有变量放入。 (“record_id”和“缩写”除外,因为我会手动填写这些内容)
现在通过运行代码(A),它在result.csv中生成以下输出:
当前输出
record_id abbreviation patient_id step_count distance ambulation_time velocity cadence normalized_velocity step_time_differential step_length_differential cycle_time_differential step_time step_length step_extremity cycle_time stride_length hh_base_support swing_time stance_time single_supp_time double_supp_time toe_in_out
70520161453 3 292,34 1,67 , 107,8 , 0,004 1,051 0,008 , 96,746 , 1,116 , 2,988 , , , ,
正如您所看到的,与所需的输出(B)相比,有许多值缺失,以及显示的一些,但不正确。
现在我遇到的问题如下:
问题1
因为我正在阅读我正在阅读的.csv文件中的名称,以及我的定义(A)中的名称。其中一些不完全匹配,或与部分具有相同名称的其他人混淆。
这是问题所在:
patient_id, velocity, step_time, stride_length, swing_time, stance_time, single_supp_time, double_supp_time, toe_in_out
例如,我的定义中的速度与我正在阅读的.csv文件中的速度匹配,但它也与stridevelocitystddev匹配。这导致速度缺失值。
问题2
以下所有变量都包含2个值而不是1,例如step_time包含值0,558& 0554。对于包含2个值的所有这些变量,我想计算两者的平均值,然后只将平均值(在本例中为平均值0,558和0.554 = 0,56)写入属于step_time的result.csv。 / p>
step_time, step_length, cycle_time, stride_length, hh_base_support, swing_time, stance_time, single_supp_time, double_supp_time, toe_in_out
希望有人能帮助我解决这些问题,将不胜感激!
随意使用我正在使用的导出文件,您可以在此处下载: CSV export file
(A)Python代码
import csv
from collections import defaultdict
from datetime import datetime
data = defaultdict(str)
result = 'path/to/file/result_%s.csv'%datetime.now().strftime('%b-%d-%Y_%H%M')
#Make a list with the predefined variables
definition = ["record_id", "abbreviation", "patient_id", "step_count", "distance", "ambulation_time", "velocity", "cadence", "normalized_velocity", "step_time_differential", "step_length_differential", "cycle_time_differential", "step_time", "step_length", "step_extremity", "cycle_time", "stride_length", "hh_base_support", "swing_time", "stance_time", "single_supp_time", "double_supp_time", "toe_in_out"]
#Read the GaitRite .csv
with open('path/to/file/Export 4.csv', 'r') as f, open(result, 'w') as outfile:
reader = csv.reader(f, delimiter=';')
next(reader, None) # skip the headers
writer = csv.DictWriter(outfile, fieldnames=definition, lineterminator='\n')
writer.writeheader()
#Read the .csv row by row
for row in reader:
for item in definition:
h = item.replace('_', '')
r0 = row[0].lower().replace(' ', '')
if h in r0:
try:
avg = round((float(row[1].replace(',', '.')) + float(row[2].replace(',', '.'))) / 2, 2)
data[item] = avg
except ValueError:
avg = 0 # for cases with entry strings or commas
data[item] = row[1]
data['record_id'] = datetime.now().strftime('%m%d%Y%H%M')
# Write the clean result.csv
writer.writerow(data)
(B)所需的.csv输出
record_id abbreviation patient_id step_count distance ambulation_time velocity cadence normalized_velocity step_time_differential step_length_differential cycle_time_differential step_time step_length step_extremity cycle_time stride_length hh_base_support swing_time stance_time single_supp_time double_supp_time toe_in_out
70520161453 25 3 292,34 1,67 175,1 107,8 0,004 1,051 0,008 0,56 97,27 1,11 194,64 4,65 0,47 0,65 0,47 0,18 1,45