Reputation: 1071
I feel like an idiot right now, why isn't this working
results = pd.DataFrame(columns=['avg_daily_rets','cum_rets','STDEV','Sharpe'])
results.cum_rets = 4
results
returns
avg_daily_rets cum_rets STDEV Sharpe
with no values
whereas
results = pd.DataFrame(columns=['avg_daily_rets','cum_rets','STDEV','Sharpe'])
results.cum_rets = np.arange(5)
results
returns
avg_daily_rets cum_rets STDEV Sharpe
0 NaN 0 NaN NaN
1 NaN 1 NaN NaN
2 NaN 2 NaN NaN
3 NaN 3 NaN NaN
4 NaN 4 NaN NaN
ultimately i'm doing this:
results = DataFrame(columns = ['avg_daily_rets','cum_rets','STDEV','Sharpe'])
results['avg_daily_rets'] = data.Daily_rets.mean()
print data.Daily_rets.mean()
results.cum_rets = data.Daily_rets.sum()
print data.Daily_rets.sum()
results.STDEV = data.Daily_rets.std()
print data.Daily_rets.std()
results.Sharpe = results.avg_daily_rets / results.STDEV * np.sqrt(250)
print results.avg_daily_rets / results.STDEV * np.sqrt(250)
0.0257851999606
46.3102191292
0.052303548452
Series([], dtype: float64)
and getting the same as above:
avg_daily_rets cum_rets STDEV Sharpe
Upvotes: 2
Views: 1363
Reputation: 1040
The columns in pandas refer to Series
objects, so you can't set them to an Int
.
>>> import pandas as pd
>>> results = pd.DataFrame(columns=['avg_daily_rets','cum_rets','STDEV','Sharpe'])
>>> print type(results.cum_rets)
<class 'pandas.core.series.Series'>
Try
>>>results.cum_rets = [5]
>>> print results
avg_daily_rets cum_rets STDEV Sharpe
0 NaN 5 NaN NaN
Pandas converts list
s and dict
s to Series
, so you can make columns out of them.
EDIT:
I should have also pointed out, once you have the value, you can then set individual values directly. Eg:
>>>results.cum_rets[0] = 6
>>>print results.cum_rets
avg_daily_rets cum_rets STDEV Sharpe
0 NaN 6 NaN NaN
Upvotes: 1
Reputation: 862431
I think you can create and filled DataFrame
by arrays
instead of scalar
docs:
print data
Daily_rets
a 1
b 2
c 3
avg_daily_rets = data.Daily_rets.mean()
print avg_daily_rets
2.0
cum_rets = data.Daily_rets.sum()
print cum_rets
6
STDEV = data.Daily_rets.std()
print STDEV
1.0
Sharpe = avg_daily_rets / STDEV * np.sqrt(250)
print Sharpe
31.6227766017
print pd.DataFrame( { 'avg_daily_rets': [ avg_daily_rets ],
'cum_rets': [ cum_rets ],
'STDEV': [ STDEV ],
'Sharpe': [ Sharpe ] })
STDEV Sharpe avg_daily_rets cum_rets
0 1 31.622777 2 6
You can add parameter columns
, if you want change order of columns:
print pd.DataFrame( { 'avg_daily_rets': [ avg_daily_rets ],
'cum_rets': [ cum_rets ],
'STDEV': [ STDEV ],
'Sharpe': [ Sharpe ] },
columns = ['Sharpe', 'STDEV','cum_rets','avg_daily_rets'])
Sharpe STDEV cum_rets avg_daily_rets
0 31.622777 1 6 2
Upvotes: 2