创建Pandas系列时出现意外结果

2024-04-26 20:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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

Tags: 数据inselfnumpypandasdatenandict