2015-11-30 26 views
1

我有型pandas.core.frame.DataFrame 像一個數據幀:如何插入大熊貓數據幀的日期時間索引的MongoDB與isoDate類型的字段

   open high close low volume  amount 
date              
2015-11-27 8.10 8.16 7.35 7.34 37877648 294274400 
2015-11-26 8.03 8.44 8.16 8.00 45933600 378897088 
2015-11-25 7.95 8.03 7.99 7.89 21255886 169172176 
2015-11-24 7.95 8.18 8.04 7.85 24808112 199120256 
2015-11-23 8.24 8.29 7.95 7.93 29176848 236019264 

df.index

DatetimeIndex(['2015-11-27', '2015-11-26', '2015-11-25', '2015-11-24', 
      '2015-11-23', '2015-11-20', '2015-11-19', '2015-11-18', 
      '2015-11-17', '2015-11-16', 
      ... 
      '2014-12-12', '2014-12-11', '2014-12-10', '2014-12-09', 
      '2014-12-08', '2014-12-05', '2014-12-04', '2014-12-03', 
      '2014-12-02', '2014-12-01'], 
      dtype='datetime64[ns]', name=u'date', length=193, freq=None) 

如何將df插入到帶有date.index字段的mongodb中,格式爲isoDate但不包含datatime64 [ns]/timestamps? 。

回答

2

我已經困擾了很長時間,但我終於找到了一種方法來做到這一點。 這取決於我們插入mongod的方式。 我用這種方式插入的mongod:

records = json.loads(DataFrame.T.to_json()).values() 
collection.insert_many(records) 

我們需要明白,這種方法將數據幀的時間轉換成datatime64 [NS] /時間戳。

print records[0] 
{u'dtime': 1407076151000L,u'olddtime': u'2014/8/3 14:29:11'} 

我們可以看到,它可以節省時間numberlong和日期時間爲string.So我們需要更改記錄:

for row in records: 
    row['olddtime'] = datetime.datetime.strptime(row['olddtime'], "%Y/%m/%d %H:%M:%S") 

然後我們打印:

{u'olddtime': datetime.datetime(2014, 8, 3, 14, 29, 11), u'dtime': 1407076151000L} 

最後我們做到這一點:

collection.insert_many(records) 

那好的!

+0

如果我想覆蓋mongodb中的條目,如果它是相同的,那麼該怎麼做。我們想用upsert選項來更新它,但是如何構造它? –