尝试从python中解析的文本代码创建两个CSV文件
我对代码非常陌生。我正试图修改一个我在网上找到的程序,只过滤出带有M32的ICD10或一些变体(M32.1、M32.2等)的行 当我运行代码时,我的表中有很多重复的输出,我不知道为什么或者如何修复它,你能帮我吗尝试从python中解析的文本代码创建两个CSV文件,python,pandas,Python,Pandas,我对代码非常陌生。我正试图修改一个我在网上找到的程序,只过滤出带有M32的ICD10或一些变体(M32.1、M32.2等)的行 当我运行代码时,我的表中有很多重复的输出,我不知道为什么或者如何修复它,你能帮我吗 fileObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllC
fileObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllCnty\MULT1999.AllCnty.txt",'r')
fileOutObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllCnty\MULT1999.AllCnty.M32.csv","a")
fileOutObj.write('Record, Sex, Race_R1, Race_R2, Hispanic_Origin_Recode, Age, Marital, Education, ICD10, FIPS_Occur_State, FIPS_Occur_County, FIPS_Reside_State, FIPS_Reside_County, FIPS_Reside_City, Record_Axis\n')
outStr = ""
for line in fileObj:
Record = line[18].strip()
Sex = line[58].strip()
Race_R1 = line[61].strip()
Race_R2 = line[62].strip()
Hispanic_Origin_Recode = line[81].strip()
Age = line[63:65].strip()
Marital = line[76].strip()
Education = line[51:52].strip()
ICD10 = line[141:144].strip()
FIPS_Occur_State = line[118:119].strip()
FIPS_Occur_County = line[120:122].strip()
FIPS_Reside_State = line[123:124].strip()
FIPS_Reside_County = line[125:127].strip()
FIPS_Reside_City = line[96:100].strip()
Record_Axis = line [340:439].strip()
if ICD10 in ['M32']:
outStr = (Record+ ','+Sex+ ',' +Race_R1 + ', ' + Race_R2+ ', ' + Hispanic_Origin_Recode +', '+ Age + ', ' + Marital + ', ' + Education + \
', ' + ICD10 + ', ' + FIPS_Occur_State + ', ' + FIPS_Occur_County + ', ' + FIPS_Reside_State + \
', ' + FIPS_Reside_County + ', ' +FIPS_Reside_City +', ' + Record_Axis + '\n')
fileOutObj.write(outStr)
print("Parse complete.")
fileOutObj.close()
fileObj.close()
每次迭代后,您的对象outStr应该重置为空字符串。否则,每个新行将添加到旧行。写入文件时,将再次写入完整的字符串。您可以在循环内定义外扩,以便将范围定义为循环的一次迭代 在
if
-语句中有一些连线。变量ICD10是一个格式为M32.*的字符串。您正在将此字符串与此行中定义的数组元素进行比较。只有元素“M32”
我提出了一些不同的解决方案,消除了for循环。我让熊猫做这件事
有熊猫的功能read_fwf
。您可以定义列并为它们命名。读取后,可以筛选ICD10列
tbl = pd.read_fwf("data_file.txt",
colspecs=[[0,1], [2, 3], [3, 8]],
header=None,
names=["Record ", "ICD10"]
usecols=[1])
阅读后,您可以使用将其写入光盘,以_csv
如果文件太大,无法立即读取,请尝试使用参数chunksize
或iterator
。只有在这种情况下,您才定义了自己的循环