遍历DataFrame生成文本文件:Series对象无ljust属性的问题求助
问题分析与解决方案
问题根源
- __str__方法逻辑错误:原代码的
__str__方法在循环中每次迭代就直接return,只会返回第一个字段的格式化结果,无法完成所有字段的拼接。 - 属性类型不匹配:当直接将整个
dental_df['Agreement_Number'](pandas Series对象)赋值给r.Agreement_Number时,后续调用ljust()会报错——因为ljust()是字符串专属方法,Series对象没有该属性。
修正代码
第一步:修复Reporting_Information类的__str__方法
class Reporting_Information: """ ES0388F4 UCCI 130 Record (Reporting Information) """ fields = ( ('Agreement_Number',13), ("Contract_ID",27), ('Record_Identifier',3), ('Sequence_Number',7), ('Report_Count',2), ('Report_Qualifier_Code',2), ('Report_Qualifier',0), ('Effective_Date',10), ('Report_ID',30), ('Report_Qualifier2',10), ('Cancel_Date',0), ('Filler',396) ) def __init__(self): self.Agreement_Number ='' self.Contract_ID ='' self.Record_Identifier ='130' self.Sequence_Number ='0' self.Report_Count ='01' self.Report_Qualifier_Code='LU' self.Report_Qualifier ='' self.Effective_Date ='' self.Report_ID ='' self.Report_Qualifier2 ='' self.Cancel_Date = '' self.Filler ='' def __str__(self): # 收集所有字段的格式化结果后再拼接返回 formatted_fields = [] for field_name, width in self.fields: field_value = getattr(self, field_name) # 强制转为字符串,避免非字符串值调用ljust报错 formatted_field = str(field_value).ljust(width) formatted_fields.append(formatted_field) return ''.join(formatted_fields)
第二步:批量生成多行协议编号条目
# 遍历DataFrame的Agreement_Number列,生成每个编号对应的格式化记录 report_records = [] for agreement_num in dental_df['Agreement_Number']: r = Reporting_Information() r.Agreement_Number = agreement_num # 可根据业务需求补充设置其他字段(如Contract_ID、Effective_Date等) report_records.append(str(r)) # 打印所有生成的记录 for record in report_records: print(record)
关键说明
- 修复后的
__str__方法会遍历所有字段,将每个字段值转为字符串后调用ljust(),最终拼接成完整的记录字符串。 - 通过循环遍历DataFrame的Agreement_Number列,为每个编号创建独立的类实例,确保每个实例的Agreement_Number都是单个字符串值,彻底避免类型不匹配问题。
内容的提问来源于stack exchange,提问作者Nayana Mahajan
相关产品推荐
相关产品推荐

