TypeError:索引不支持可变操作-遍历日期范围

时间:2019-06-16 19:57:23

标签: python-3.x typeerror mutable

我有两个列日期(类型对象已在我的代码的其余部分中使用),并且正在尝试将这些日期之间的范围划分为两个/多个财务年度,将它们相加并将其与日费率相乘以获得收益和遍历数据框中的每一行。

我正在计算每人/每行的收入,并通过遍历itterow并计算收入=费率*天数来计算。现在,作为扩展,我得到了两个日期列的范围,我想对纳税年度之前和之后的日期求和,并将其乘以每天的税率。 香港专业教育学院试图将此纳入我的迭代     day_range [i] = pd.bdate_range(开始,结束) 并且它给出类型错误索引不支持可变操作。当我不为除以下最后两行以外的所有列添加[i]时,完整的代码有效。 我也尝试过     day_range.date [i]和     day_range.datetime索引] [i] 这给了我IndexError:索引2超出了大小为1的轴0的范围 和TypeError:“ DatetimeIndex”对象不能解释为整数 分别。除了下面的最后两行是我的列名分配之外,所有列均正确填充

financialYear0 = []
financialYear1= []
dateString0 = []  
dateString1 = []
i = 0

for i, row in df.iterrows():
    start = pd.to_datetime(df['Start_'][i])
    end = pd.to_datetime(df['End_'][i])
    holidays = df['Holidays'][i]       
    df['Project_Days'][i] = workdays(start, end, holidays)
    rev[i] = day[i] * rate[i]
    rev[i] = rev[i]*df['Percentage'][i]//100
    day_range.datetimeindex =  pd.bdate_range(start, end)

    for day_ in range(day_range.datetimeindex):
        date_str = datetime.datetime(day_.year, day_.month, day_.day, 0, 
0)
        date_str = day_.strftime('%m, %d, %Y')
        date_ = datetime.datetime.strptime(date_str, "%m, %d, 
%Y").date()
        year_of_date=date_.year
        #initialize the current financial year start date
        financial_year_start_date = datetime.datetime.strptime("04, 01, 
" + 
        str(year_of_date), "%m, %d, %Y").date()
        #change back to string

        if date_<financial_year_start_date:
            str_date0 = datetime.datetime(date_.year, date_.month, 
date_.day, 
         0, 0)
            str_date0 = date_.strftime('%d, %m, %Y')
            dateString0.append(str_date0)
        else: 
            str_date1 = datetime.datetime(date_.year, date_.month, 
date_.day, 
         0, 0)
            str_date1 = date_.strftime('%d, %m, %Y')
            dateString1.append(str_date1)

    num_string = len(dateString0)
    num_string1 = len(dateString1)
    financialYear0[i] = num_string * rate[i]
    financialYear1[i] = num_string1 * rate[i]   

我的后两行在倒数第二行给出错误的结果,而对第一行进行更正。我怀疑通过添加[i]来使day_range可迭代时,它出了错

1 个答案:

答案 0 :(得分:1)

将两个数组的初始化移动到循环中-意识到在第一个循环输出之后是错误的。