使用pandas软件包已经有一段时间了,在使用dict创建pandas系列时,我得到了意想不到的结果。附上简化数据:
d = {numpy.datetime64('2015-01-07T02:00:00.000000000+0200'): 42544017.198965244,
numpy.datetime64('2015-01-08T02:00:00.000000000+0200'): 40512335.181958228,
numpy.datetime64('2015-01-09T02:00:00.000000000+0200'): 39712952.781494237,
numpy.datetime64('2015-01-12T02:00:00.000000000+0200'): 39002721.453793451}
s = pd.Series(d)
s
这给了我:
2015-01-07 NaN
2015-01-08 NaN
2015-01-09 NaN
2015-01-12 NaN
dtype: float64
这对我来说是完全出乎意料的,因为我很确定当dict被传递时Series会创建一个按键排序的Series。仍将检查这是否与以前版本的熊猫不同。我这里用的是0.15.2。有什么建议吗?你知道吗
刚刚在熊猫身上测试了0.10.0,得到了同样的结果。我是遗漏了什么还是和我正在传递的类型有关?你知道吗
进一步的测试表明,是datetime导致了这些问题。它们源于应用了parse\u日期的pandas read\u csv方法。奇怪的是这应该是个问题。怀疑是熊猫虫?你知道吗
根据Jeff的请求,这里是从pandas数据帧生成dict的代码:
def _calculate_notional_cash(self):
'''Calculate the notional cash in portfolio
Done by getting difference beteen NAV and sum of positions
self.PMSposition_dict is dict of dataframes with Position information
'''
sumpos={}
for FundID, FundName in self.fund_number_name.iteritems():
sumpos[FundID] = {}
# self.PMSposition_dict[FundID]['MarketValueInZAR'].sum()
for date in self.PMSposition_dict[FundID].Date.unique():
s = self.PMSposition_dict[FundID][self.PMSposition_dict[FundID]['Date'] == date]['MarketValueInZAR'].sum()
sumpos[FundID][date] = s
self.sumpos = sumpos
解决这个问题的一种方法是:
相关问题 更多 >
编程相关推荐