为什么我的pandas数据帧返回多个标头


我创建了一个函数来从电子表格中返回一堆变量。我试图返回到pandas数据帧而不是元组中,并得到了结果。问题是它通过每一行返回标题(见图(。很抱歉,如果这是一个简单的解决方案,我是新来的!非常感谢。

In:

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']

def get_holdings_info(d):
date = 0
sbhmv = 0
sbhbv = 0
sbhs = 0
setfhmv = 0
setthbv = 0
setfhs = 0
smmhmv = 0
smmhbv = 0
smmhs = 0
r = open('holdings/Holdings As Of ' + d + '.csv', 'r')
line = r.readline()
holdings_date = line[13:21]
date = datetime.datetime.strptime(holdings_date, "%Y%m%d")
holdings_file = 'holdings/Holdings As Of ' + d + '.csv'
df = pd.read_csv(holdings_file, header=1)
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
account_names = ["fund1", "fund2"]
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 pd.DataFrame({'Date': [date], 'Bond Market Value':[sbhmv], 'Bond Book Value':[sbhbv], 'Bond Shares':[sbhs], 'ETF Market Value': [setfhmv], 'ETF Book Value' : [setthbv], 'ETF Shares': [setfhs], 'Money Market Market Value':[smmhmv], 'Money Market Book Value': [smmhbv], 'Money Market Shares':[smmhs]}
, columns=['Date', 'Bond Market Value', 'Bond Book Value', 'Bond Shares', 'ETF Market Value', 'ETF Book Value', 'ETF Shares', 'Money Market Market Value', 'Money Market Book Value', 'Money Market Shares'])
def get_holdings_info_array():
c = []
for f in holdings_darray:
c.append(get_holdings_info(f))
return(c)
print(get_holdings_info_array())

输出的图片

问题是在列表c中写入多个DataFrames。如果您打印它,它将显示列出的所有数据帧。相反,您可以将它们添加到一个数据帧中:

def get_holdings_info_array():
c = pd.DataFrame()
for f in holdings_darray:
c = c.append(get_holdings_info(f), ignore_index=True)
return(c)

hi你应该试试这个代码

df = pd.DataFrame([date,sbhmv,sbhbv,sbhs,setfhmv,setthbv,setfhs,smmhmv,smmhbv,smmhs])
df = df.T
df.columns =['Date',
'Bond Market Value',
'Bond Book Value',
'Bond Shares',
'ETF Market Value',
'ETF Book Value', 
'ETF Shares',
'Money Market Market Value',
'Money Market Book Value',
'Money Market Shares']
return df 

而不是:

return pd.DataFrame({'Date': [date], 'Bond Market Value':[sbhmv], 'Bond Book Value':[sbhbv], 'Bond Shares':[sbhs], 'ETF Market Value': [setfhmv], 'ETF Book Value' : [setthbv], 'ETF Shares': [setfhs], 'Money Market Market Value':[smmhmv], 'Money Market Book Value': [smmhbv], 'Money Market Shares':[smmhs]}
, columns=['Date', 'Bond Market Value', 'Bond Book Value', 'Bond Shares', 'ETF Market Value', 'ETF Book Value', 'ETF Shares', 'Money Market Market Value', 'Money Market Book Value', 'Money Market Shares'])

我认为您想要一个由2行10列组成的数据帧来描述值。所以你必须使用

data = [date,sbhmv,sbhbv,sbhs,setfhmv,setthbv,setfhs,smmhmv,smmhbv,smmhs]
columns = ['Date','Bond Market Value','Bond Book Value','Bond Shares','ETF Market Value','ETF Book Value', 'ETF Shares','Money Market Market Value','Money Market Book Value','Money Market Shares']
df = pd.DataFrame(data, columns)

而不是:

pd.DataFrame({'Date': [date], 'Bond Market Value':[sbhmv], 'Bond Book Value':[sbhbv], 'Bond Shares':[sbhs], 'ETF Market Value': [setfhmv], 'ETF Book Value' : [setthbv], 'ETF Shares': [setfhs], 'Money Market Market Value':[smmhmv], 'Money Market Book Value': [smmhbv], 'Money Market Shares':[smmhs]}
, columns=['Date', 'Bond Market Value', 'Bond Book Value', 'Bond Shares', 'ETF Market Value', 'ETF Book Value', 'ETF Shares', 'Money Market Market Value', 'Money Market Book Value', 'Money Market Shares'])

最新更新