मुझे एक पैनल में मास्किंग करने में कुछ परेशानी हो रही है, जिस तरह से मैं डेटाफ्रेम करता हूं। मैं जो करना चाहता हूं वह सरल लगता है, लेकिन मुझे दस्तावेज़ों और ऑनलाइन मंचों को देखने का कोई तरीका नहीं मिला है।पांडा पैनल में बूलियन मास्क
import pandas
import numpy as np
import datetime
start_date = datetime.datetime(2009,3,1,6,29,59)
r = pandas.date_range(start_date, periods=12)
cols_1 = ['AAPL', 'AAPL', 'GOOG', 'GOOG', 'GS', 'GS']
cols_2 = ['close', 'rate', 'close', 'rate', 'close', 'rate']
dat = np.random.randn(12, 6)
dftst = pandas.DataFrame(dat, columns=pandas.MultiIndex.from_arrays([cols_1, cols_2], names=['ticker','field']), index=r)
pn = dftst.T.to_panel().transpose(2,0,1)
print pn
Out[14]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 12 (major_axis) x 3 (minor_axis)
Items axis: close to rate
Major_axis axis: 2009-03-01 06:29:59 to 2009-03-12 06:29:59
Minor_axis axis: AAPL to GS
अब मैं एक पैनल वस्तु है, अगर मैं आइटम अक्ष के साथ एक टुकड़ा ले, मैं एक DataFrame
close_p = pn['close']
print close_p
Out[16]:
ticker AAPL GOOG GS
2009-03-01 06:29:59 -0.082203 -0.286354 1.227193
2009-03-02 06:29:59 0.340005 -0.688933 -1.505137
2009-03-03 06:29:59 -0.525567 0.321858 -0.035047
2009-03-04 06:29:59 -0.123549 -0.841781 -0.616523
2009-03-05 06:29:59 -0.407504 0.188372 1.311262
2009-03-06 06:29:59 0.272883 0.817179 0.584664
2009-03-07 06:29:59 -1.767227 1.168876 0.443096
2009-03-08 06:29:59 -0.685501 -0.534373 -0.063906
2009-03-09 06:29:59 0.851820 0.068740 0.566537
2009-03-10 06:29:59 0.390678 -0.012422 -0.152375
2009-03-11 06:29:59 -0.985585 -0.917705 -0.585091
2009-03-12 06:29:59 0.067498 -0.764343 0.497270
मैं दो तरीकों से इस डेटा फ़िल्टर कर सकते हैं मिलता है: मैं नीचे एक सरल उदाहरण है :
1) मैं इस प्रकार एक मुखौटा बना सकते हैं और डेटा मुखौटा:
msk = close_p > 0
close_p = close_p.mask(msk)
2) मैं सिर्फ बूलियन सेशन से काट कर सकते हैं ऊपर
close_p = close_p[close_p > 0]
Out[28]:
ticker AAPL GOOG GS
2009-03-01 06:29:59 NaN NaN 1.227193
2009-03-02 06:29:59 0.340005 NaN NaN
2009-03-03 06:29:59 NaN 0.321858 NaN
2009-03-04 06:29:59 NaN NaN NaN
2009-03-05 06:29:59 NaN 0.188372 1.311262
2009-03-06 06:29:59 0.272883 0.817179 0.584664
2009-03-07 06:29:59 NaN 1.168876 0.443096
2009-03-08 06:29:59 NaN NaN NaN
2009-03-09 06:29:59 0.851820 0.068740 0.566537
2009-03-10 06:29:59 0.390678 NaN NaN
2009-03-11 06:29:59 NaN NaN NaN
2009-03-12 06:29:59 0.067498 NaN 0.497270
एमएसके में erator मुझे क्या करना कैसे को समझ नहीं सकता फिल्टर पाश के लिए एक के बिना अपने डेटा एक मुखौटा के आधार पर सभी को है। मैं निम्नलिखित कर सकता हूं:
msk = (pn['rate'] > 0) & (pn['close'] > 0)
def mask_panel(pan, msk):
for item in pan.items:
pan[item] = pan[item].mask(msk)
return pan
print pn['close']
Out[32]:
ticker AAPL GOOG GS
2009-03-01 06:29:59 -0.082203 -0.286354 1.227193
2009-03-02 06:29:59 0.340005 -0.688933 -1.505137
2009-03-03 06:29:59 -0.525567 0.321858 -0.035047
2009-03-04 06:29:59 -0.123549 -0.841781 -0.616523
2009-03-05 06:29:59 -0.407504 0.188372 1.311262
2009-03-06 06:29:59 0.272883 0.817179 0.584664
2009-03-07 06:29:59 -1.767227 1.168876 0.443096
2009-03-08 06:29:59 -0.685501 -0.534373 -0.063906
2009-03-09 06:29:59 0.851820 0.068740 0.566537
2009-03-10 06:29:59 0.390678 -0.012422 -0.152375
2009-03-11 06:29:59 -0.985585 -0.917705 -0.585091
2009-03-12 06:29:59 0.067498 -0.764343 0.497270
mask_panel(pn, msk)
print pn['close']
Out[34]:
ticker AAPL GOOG GS
2009-03-01 06:29:59 -0.082203 -0.286354 NaN
2009-03-02 06:29:59 NaN -0.688933 -1.505137
2009-03-03 06:29:59 -0.525567 NaN -0.035047
2009-03-04 06:29:59 -0.123549 -0.841781 -0.616523
2009-03-05 06:29:59 -0.407504 NaN NaN
2009-03-06 06:29:59 NaN NaN NaN
2009-03-07 06:29:59 -1.767227 NaN NaN
2009-03-08 06:29:59 -0.685501 -0.534373 -0.063906
2009-03-09 06:29:59 NaN NaN NaN
2009-03-10 06:29:59 NaN -0.012422 -0.152375
2009-03-11 06:29:59 -0.985585 -0.917705 -0.585091
2009-03-12 06:29:59 NaN -0.764343 NaN
तो उपर्युक्त पाश चाल करता है। मुझे पता है कि ndarray का उपयोग करके ऐसा करने का एक तेज़ वेक्टरीकृत तरीका है, लेकिन मैंने अभी तक इसे एक साथ नहीं रखा है। ऐसा लगता है कि यह कार्यक्षमता होना चाहिए जो पांडा पुस्तकालय में बनाया गया है। यदि ऐसा करने का कोई तरीका है कि मुझे याद आ रही है, तो किसी भी सुझाव की सराहना की जाएगी।
यह लगता है जैसे आप में सक्षम होना चाहिए बूलियन पैनल 'pn.gt (0)' का उपयोग करने के लिए ... –
धन्यवाद एंडी, जब तक कि मैं गलत नहीं हूं, मुझे लगता है कि कुछ अलग होगा। यह मेरे पैनल में प्रत्येक डेटाफ्रेम को नकार देगा जहां इसके मान 0 से कम हैं। मैं अपने पैनल में प्रत्येक डेटाफ्रेम को नैन करना चाहता हूं, जहां 'बंद' 0 से कम है। फिर, मेरे पैनल में एक विशिष्ट डेटाफ्रेम बंद है । अगर मैं कुछ अच्छी तरह से आती हूं तो मैं झुकाव रखूंगा और पोस्ट करूंगा। – granders19
क्या यह केवल निकट डेटाफ्रेम (पैनल का हिस्सा) को प्रभावित करेगा? क्या आप इसे पैनल में बदलना चाहते हैं और अन्य अपरिवर्तित छोड़ना चाहते हैं? –