【问题标题】:ValueError: too many values to unpack PandasValueError:太多值无法解压 Pandas
【发布时间】:2021-06-01 14:17:58
【问题描述】:

我有以下代码。但是我在执行相同时遇到错误。我希望该函数计算计划日期并输出相同的新数据帧。 似乎错误在for循环中。我是新手,所以只是想弄清楚

import QuantLib as ql
import pandas as pd
import numpy as np
import datetime
from dateutil.parser import parse

data = pd.read_excel (r'C:\Users\Avishen\Desktop\Python\BONDDATA.xlsx')

for ISIN,issuedate,maturitydate in data:
    issueDate = ql.Date(issuedate, '%d-%m-%Y')
    maturityDate = ql.Date(maturitydate, '%d-%m-%Y')
    tenor = ql.Period(ql.Semiannual)
    day_count = ql.Thirty360
    calendar = ql.UnitedStates()
    businessConvention = ql.Unadjusted
    dateGeneration = ql.DateGeneration.Backward
    monthEnd = False

    # Dates in Bond Period
    df['Test']= df['t'].apply(ISIN)
    df['Test']= df['t1'].apply(ql.Schedule (issueDate, maturityDate, tenor, calendar, businessConvention,businessConvention , dateGeneration, monthEnd))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-b6dc0a0bd926> in <module>
      8 
      9 
---> 10 for ISIN,issuedate,maturitydate in data:
     11     issueDate = ql.Date(issuedate, '%d-%m-%Y')
     12     maturityDate = ql.Date(maturitydate, '%d-%m-%Y')

ValueError: too many values to unpack (expected 3)

期望的输出

t       t1
Test1   Date(22,10,2019)
Test1   Date(8,2,2020)
Test1   Date(8,8,2020)
Test1   Date(8,2,2021)
Test1   Date(8,8,2021)
Test1   Date(8,2,2022)
Test1   Date(8,8,2022)
Test1   Date(8,2,2023)
Test1   Date(8,8,2023)

Test2   Date(31,7,2020)
Test2   Date(21,9,2020)
Test2   Date(21,3,2021)
Test2   Date(21,9,2021)
Test2   Date(21,3,2022)
Test2   Date(21,9,2022)
Test2   Date(21,3,2023)
Test2   Date(21,9,2023)
Test2   Date(21,3,2024)
Test2   Date(21,9,2024)
Test2   Date(21,3,2025)

【问题讨论】:

标签: python pandas quantlib


【解决方案1】:

我假设您想要做的是逐行修改数据框(如果有更多可能会有更好的解决方案):

df['new_issueDate'] = df['issuedate'].apply(lambda row: ql.Date(row, '%d-%m-%Y')
df['new_maturityDate'] = df['maturityDate'].apply(lambda row: ql.Date(row, '%d-%m-%Y')

编辑:您只想遍历行:

t_list = []
t1_list = []
for _, row in data.iterrows():
    issueDate = ql.Date(row['issuedate'], '%d-%m-%Y')
    maturityDate = ql.Date(row['maturitydate'], '%d-%m-%Y')
    tenor = ql.Period(ql.Semiannual)
    day_count = ql.Thirty360
    calendar = ql.UnitedStates()
    businessConvention = ql.Unadjusted
    dateGeneration = ql.DateGeneration.Backward
    monthEnd = False
    t_list.append(row['ISIN'])
    t1_list.append(ql.Schedule(issueDate, maturityDate, tenor, calendar, businessConvention, businessConvention, dateGeneration, monthEnd))

new_df = pd.DataFrame({'t':t_list, 't1':t1_list})

还有其他方法可以逐行附加到数据帧,但这种方法也可以。

【讨论】:

  • 我想从现有数据帧中计算计划日期并输出到新的df
  • Ok 将编辑原始问题并提供完整代码。感谢您强调@Parfait
  • 谁能帮忙。谢谢
  • 我已经改变了我的答案,它应该会回答你的问题
  • 谢谢@jeed。出现错误 new_df = pd.DataFrame({'t':t_list', 't1':t1_list}) ^ SyntaxError: invalid syntax
猜你喜欢
  • 2020-01-20
  • 2015-12-20
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2021-01-16
  • 2018-06-01
相关资源
最近更新 更多