如何一次通过多个csv传递多个变量?

时间:2020-09-01 21:35:43

标签: python pandas csv

抱歉,我知道这可能是一个简单的问题,但是我是新来的!我从csv文件进行了所有这些计算,现在我试图在整个月中对每个文件进行相同的计算。在第一堂课def get_holdings_info(d):中,我正在计算。在第二堂课中,def get_holdings_info_array():我试图让第一堂课通过每月的每一天。我认为我的代码差不多正确,但是由于某种原因,我得到了0的返回值。预先感谢您的帮助!

holdings_darray = ['01-03-2020','01-06-2020','01-07-2020','01-08-2020','01-09-2020','01-11-2020','01-14-2020','01-15-2020','01-17-2020','01-21-2020','01-22-2020','01-23-2020',
                   '01-24-2020','01-27-2020','01-28-2020','01-29-2020','01-30-2020','01-31-2020','02-04-2020']
account_names = ["CATALYST EXCEED DEFINED SHIELD FUND", "SCA/IB FBO CAT EXCEED DEF SHIELD FD"]
bond_name = ["Bond Paying Periodic Income"]
money_market_name = ["Money Market Fund"]
mutual_fund_name = ["Mutual Fund"]


def get_holdings_info(d):


    sbhmv = 0
    sbhbv = 0
    sbhs = 0

    setfhmv = 0
    setthbv = 0
    setfhs = 0

    smmhmv = 0
    smmhbv = 0
    smmhs = 0
    holdings_file = 'holdings/Holdings As Of ' + d + '.csv'
    df = pd.read_csv(holdings_file, header=1)
    account_names = ["Fund_1", "Fund_1"]
    bond_name = ["Bond Paying Periodic Income"]
    money_market_name = ["Money Market Fund"]
    mutual_fund_name = ["Mutual Fund"]
    sbh = df[df["Account Name"].isin(account_names) & df["Security Type Name"].isin(bond_name)]

    sbhmv = sbh['Market Value'].sum()
    sbhbv = sbh['Book Value'].sum()
    sbhs = sbh['Shares'].sum()
    setfh = df[df["Account Name"].isin(account_names) & df["Security Type Name"].isin(mutual_fund_name)]

    setfhmv = setfh['Market Value'].sum()
    setthbv = setfh['Book Value'].sum()
    setfhs = setfh['Shares'].sum()
    smmh = df[df["Account Name"].isin(account_names) & df["Security Type Name"].isin(money_market_name)]

    smmhmv = smmh['Market Value'].sum()
    smmhbv = smmh['Book Value'].sum()
    smmhs = smmh['Shares'].sum()


    return sbhmv, sbhbv, sbhs, setfhmv, setthbv, setfhs, smmhmv, smmhbv, smmhs

def get_holdings_info_array():
    c = []
    for f in holdings_darray:
        c.append(get_holdings_info(f))
    return(c)

print(get_holdings_info_array())

[(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)]

1 个答案:

答案 0 :(得分:1)

这里您需要的是元组。 SO question及其答案几乎涵盖了每个变量。

您的代码在语法上正确,但在语义上是错误的。遇到return语句后,python函数完成了执行。 您的功能get_holdings_info在到达此行后完成

return sbhmv

,永远不会执行其余的操作。

如果要返回所有这些值,则可以参考我提到的所有可能的问题,但更简单的选择是:

return sbhmv, sbhbv, sbhs, setfh, setfhmv, setthbv, setfhs, smmh, smmhmv, smmhbv, smmhs

在其中返回具有所需所有值的元组。