我正试图确定贷款组合中哪些贷款超出了FHFA县贷款限额,以预测研究即将进行的法律变更的影响。我使用的代码版本只有一小部分(14k贷款)样本集,但是导入完整组合(560万)时,该代码不起作用。我绝对是Python的新手,我的经验仅限于SAS和R,这确实很生疏。
由于我无权访问实时数据,因此我导入的数据块大小为5k,这缓解了内存问题。并且我已经从FHFA网站导入了贷款限额数据,并为年,州和县代码创建了字典。
我还使用了pd.to_datetime()和.notnull()来尝试从数据和县域中删除空值。
def loan_calculation_new(row):
year = row['PROCESSED_DATE'].year
if row['PROCESSED_DATE'].month > 9:
year += 1
state_dict = year_dict[year]
if row['FIPS_STATE_CODE'] not in state_dict:
print("No State Code")
return None
county_dict = state_dict[row['FIPS_STATE_CODE']]
if row['FIPS_COUNTY_CODE'] not in county_dict:
limit = 485300
return
limit = county_dict[row['FIPS_COUNTY_CODE']]
limit > row['MTGE_LOAN_AMOUNT'].astype(int)
尝试运行计算时,我不断收到此错误:
AttributeError: ("'str' object has no attribute 'year'", 'occurred at index 0')
我想知道问题出在我的数据被划定管道,而不被解释为日期。该示例是.csv文件,似乎可以正常工作。
答案 0 :(得分:0)
看来PROCESSED_DATE
是字符串,因此您需要转换为日期时间
如果数据框中的行,您可以执行以下操作:
df['PROCESSED_DATE'] = pd.to_datetime(df['PROCESSED_DATE'])
答案 1 :(得分:0)
import datetime
def loan_calculation_new(row):
year = datetime.strptime(row['PROCESSED_DATE'], "<EXPECTED FORMAT>").year
if row['PROCESSED_DATE'].month > 9:
year += 1
...