2013-06-10 15 views
5

के साथ संग्रहीत करने में डेटाफ्रेम अपडेट करें, मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो एक पांडा डेटाफ्रेम को संग्रहीत करता है जिसे मैंने पैंडस डेटाफ्रेम से नए डेटा के साथ एक पायटेबल में संग्रहीत किया है। मैं यह जांचना चाहता हूं कि विशिष्ट डेटाटाइंड इंडेक्स के लिए पीईटीबल में कुछ डेटा गुम है (मान NaN है या एक नया टाइमस्टैम्प उपलब्ध है), इसे किसी दिए गए पांडा डेटाफ्रेम से नए मानों के साथ प्रतिस्थापित करें और इसे पायटेबल में संलग्न करें। असल में, बस एक पिक्टेबल अद्यतन करें। मैं पांडा में combine_first विधि का उपयोग कर संयुक्त डेटाफ्रेम प्राप्त कर सकता हूं। Pytable नीचे डमी डेटा के साथ बनाई गई है:पैंडस डेटाफ्रेम को किसी अन्य पांडा डेटाफ्रेम

import pandas as pd 
import numpy as np 
import datetime as dt 
index = pd.DatetimeIndex(start = dt.datetime(2001,1,1,0,0), periods = 20000,freq='10T') 
data_in_pytable = pd.DataFrame(index=index,data=np.random.randn(20000,2),columns=['value_1','value_2']) 
data.to_hdf(r'C:\pytable.h5','test',mode='r+',append=True,complevel=9,complib='zlib') 

तो pytable बनाई गई है। मैं मान लिया जाये कि है एक और dataFrame जिसके साथ मैं के साथ Pytable अपडेट करना चाहते हैं:

new_index = pd.DatetimeIndex(start = dt.datetime(2001,5,1,0,0), periods = 10000,freq='10T') 
data_to_update=pd.DataFrame(index=new_index,data=np.random.randn(10000,2),columns=['value_1','value_2']) 
store=pd.HDFStore(r'C:\pytable.h5',mode='r+',complevel=9,complib='zlib') 
store.append('test',store.select('test').combine_first(data_to_update)) 
store.close() 

समस्या यह है कि PyTable मूल मूल्यों रहता है, मौजूदा अपडेट नहीं होता। अब मेरे पास डुप्लिकेट प्रविष्टियां हैं (इंडेक्स द्वारा) क्योंकि मूल मान ओवरराइट नहीं किए जाते हैं।

सारांश: मैं किसी अन्य डेटाफ्रेम के साथ एक PyTable को कैसे अपडेट कर सकता हूं?

धन्यवाद, ELV

उत्तर

4

अंत में, मैंने इसे स्वयं पाया। मेरे मामले में, जब यह "combine_first" के रूप में पूरे नोड अधिलेखित करने के लिए यदि आप मूल और नए मूल्यों 'हो जाता है ठीक है में, यह

store.put(key,value,table=True,append=False) 

के बजाय

उपयोग करने के लिए ठीक है

store.append(key,value). 
2

यह वर्तमान में समर्थित नहीं है। PyTablesupdate विधि का समर्थन करता है, लेकिन पांडा में लागू नहीं किया गया है।

सबसे आसान तरीका है या तो mode='w' का उपयोग करें और एक नई फ़ाइल या

लिखने के

store.remove(key); store.append(.....)

HDF5 एक 'नियमित' डेटाबेस नहीं है और अद्यतन एक आम आपरेशन, अगर आप की जरूरत है एसक्यूएल एक हो सकता है कि नहीं है विकल्प।

किसी समस्या के रूप में वृद्धि के रूप में update अनुरोध करने के लिए स्वतंत्र महसूस करें।

+0

वास्तव में, यह मेरा अस्थायी समाधान था। जानकारी के लिए धन्यवाद – Elvin

संबंधित मुद्दे