pandas 0.23 - 21. Styling

Styling




pandas

Styling

संस्करण में नया 0.17.1

अनंतिम: यह एक नई सुविधा है और अभी भी विकास के अधीन है। हम सुविधाएँ जोड़ रहे हैं और संभवतः भविष्य के रिलीज़ में परिवर्तन कर रहे हैं। हमें आपकी प्रतिक्रिया सुनना अच्छा लगेगा।

इस दस्तावेज़ को जुपिटर नोटबुक के रूप में लिखा गया है, और here देखा या डाउनलोड किया जा सकता here

आप सशर्त स्वरूपण लागू कर सकते हैं , DataFrame की दृश्य स्टाइल डेटा के आधार पर DataFrame.style संपत्ति का उपयोग करके। यह एक संपत्ति है जो एक Styler ऑब्जेक्ट लौटाता है, जिसमें डेटाफ़्रेम को प्रारूपित करने और प्रदर्शित करने के लिए उपयोगी तरीके हैं।

स्टाइलिंग को CSS का उपयोग करके पूरा किया जाता है। आप "स्टाइल फ़ंक्शंस" लिखते हैं, जो स्केलर, DataFrame या Series लेते हैं, और सीएसएस "attribute: value" मानों के लिए "attribute: value" जोड़े के साथ अनुक्रमित डेटाफ़्रेम या सीरीज़ की तरह लौटाते हैं। ये फ़ंक्शन Styler लिए Styler से पारित किए जा सकते हैं जो रेंडर करने से पहले शैलियों को इकट्ठा करता है।

भवन शैलियाँ

अपनी शैली के कार्यों को निम्न विधियों में से एक में पास करें:

  • Styler.applymap : एलिमेंट वाइज
  • Styler.apply : कॉलम- / पंक्ति- / तालिका-वार

वे दोनों विधियाँ एक फ़ंक्शन (और कुछ अन्य कीवर्ड तर्क) लेती हैं और एक निश्चित तरीके से आपके फ़ंक्शन को डेटाफ़्रेम पर लागू करती हैं। Styler.applymap DataFrame एलिमेंट वाइज के माध्यम से काम करता है। Styler.apply axis कीवर्ड तर्क के आधार पर प्रत्येक कॉलम या पंक्ति को आपके DataFrame में एक-बार-बार या संपूर्ण तालिका में पास करता है। स्तंभकार उपयोग axis=0 , axis=1 उपयोग करें axis=1 , और पूरी तालिका के लिए एक बार axis=None उपयोग करें axis=None

Styler.applymap आपके फ़ंक्शन को एक स्केलर लेना चाहिए और CSS विशेषता-वैल्यू जोड़ी के साथ एक स्ट्रिंग वापस करना चाहिए।

Styler.apply आपके फ़ंक्शन को एक श्रृंखला या डेटाफ़्रेम (अक्ष पैरामीटर के आधार पर) लेना चाहिए, और एक श्रृंखला या डेटाफ़्रेम को एक समान आकार के साथ लौटाएं जहां प्रत्येक मूल्य सीएसएस विशेषता-मूल्य जोड़ी के साथ एक स्ट्रिंग है।

आइए कुछ उदाहरण देखें।

In [2]:
import pandas as pd
import numpy as np

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
               axis=1)
df.iloc[0, 2] = np.nan

यहाँ किसी भी (दृश्यमान) शैलियों के बिना, DataFrame प्रदान करने का एक उबाऊ उदाहरण है:

In [3]:
df.style
Out[3]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

नोट : DataFrame.style विशेषता एक संपत्ति है जो एक Styler ऑब्जेक्ट देता है। Styler में एक _repr_html_ विधि है जो इस पर परिभाषित की गई है, इसलिए वे स्वचालित रूप से प्रदान की जाती हैं। यदि आप वास्तविक एचटीएमएल को आगे की प्रक्रिया के लिए वापस चाहते हैं या कॉल के लिए लिखित .render() विधि जो एक स्ट्रिंग लौटाता है।

उपरोक्त आउटपुट मानक DataFrame HTML प्रतिनिधित्व के समान दिखता है। लेकिन हमने सीएसएस कक्षाओं को प्रत्येक सेल में संलग्न करने के लिए पर्दे के पीछे कुछ काम किया है। हम .render पद्धति को कॉल करके इन्हें देख सकते हैं।

In [4]:
df.style.highlight_null().render().split('\n')[:10]
Out[4]:
['<style  type="text/css" >',
 '    #T_4c0fa58e_98a7_11e8_9d82_ff3af6a67056row0_col2 {',
 '            background-color:  red;',
 '        }</style>  ',
 '<table id="T_4c0fa58e_98a7_11e8_9d82_ff3af6a67056" > ',
 '<thead>    <tr> ',
 '        <th class="blank level0" ></th> ',
 '        <th class="col_heading level0 col0" >A</th> ',
 '        <th class="col_heading level0 col1" >B</th> ',
 '        <th class="col_heading level0 col2" >C</th> ']

row0_col2 उस विशेष सेल के लिए पहचानकर्ता है। हमने प्रत्येक डेटाफ़्रेम के लिए एक यूयूआईडी के साथ प्रत्येक पंक्ति / स्तंभ पहचानकर्ता को पहले से जोड़ दिया है ताकि एक से एक ही नोटबुक या पृष्ठ के भीतर स्टाइल दूसरे से नहीं टकराए (यदि आप चाहें तो uuid सेट कर सकते हैं) एक साथ दो DataFrames की स्टाइल टाई)।

स्टाइल फ़ंक्शन लिखते समय, आप सीएसएस विशेषता / मूल्य जोड़े जो आप चाहते हैं, का उत्पादन करने का ख्याल रखते हैं। पंडों को सीएसएस वर्गों के साथ मेल खाता है जो प्रत्येक कोशिका की पहचान करते हैं।

आइए एक सरल शैली फ़ंक्शन लिखें जो नकारात्मक संख्याओं को लाल और सकारात्मक संख्याओं को काले रंग में रंग देगा।

In [5]:
def color_negative_red(val):
    """
    Takes a scalar and returns a string with
    the css property `'color: red'` for negative
    strings, black otherwise.
    """
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

इस मामले में, सेल की शैली केवल उसके स्वयं के मूल्य पर निर्भर करती है। इसका मतलब है कि हमें Styler.applymap मेथड का इस्तेमाल करना चाहिए जो एलिमेंट वाइज काम करता है।

In [6]:
s = df.style.applymap(color_negative_red)
s
Out[6]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

मानक df.applymap साथ समानता पर ध्यान दें, जो DataFrames एलिमेंट वाइज संचालित होता है। हम चाहते हैं कि आप DataFrames के साथ बातचीत करने के अपने मौजूदा ज्ञान का पुन: उपयोग करने में सक्षम हों।

यह भी देखें कि हमारे फ़ंक्शन ने सीएसएस विशेषता और मूल्य युक्त एक स्ट्रिंग लौटा दी, एक <style> टैग की तरह एक कोलन द्वारा अलग। यह एक सामान्य विषय होगा।

अंत में, इनपुट आकृतियों का मिलान हुआ। Styler.applymap प्रत्येक स्केलर इनपुट पर फ़ंक्शन को कॉल करता है, और फ़ंक्शन एक स्केलर आउटपुट देता है।

अब मान लीजिए कि आप प्रत्येक कॉलम में अधिकतम मूल्य को उजागर करना चाहते हैं। हम उस संचालित तत्व के बाद से .applymap उपयोग नहीं कर सकते हैं। इसके बजाय, हम .apply ओर रुख करेंगे, जो कॉलमवाइज़ संचालित करता है (या axis कीवर्ड का उपयोग करते हुए)। बाद में हम देखेंगे कि हाइलाइट_मैक्स जैसा कुछ पहले से ही Styler पर परिभाषित है, इसलिए आपको इसे स्वयं लिखने की आवश्यकता नहीं होगी।

In [7]:
def highlight_max(s):
    '''
    highlight the maximum in a Series yellow.
    '''
    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]
In [8]:
df.style.apply(highlight_max)
Out[8]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

इस मामले में इनपुट एक Series , एक समय में एक स्तंभ। ध्यान दें कि हाइलाइट_मैक्स का आउटपुट आकार इनपुट आकार, len(s) आइटम के साथ एक सरणी से मेल खाता है।

हम आपको शैली के टुकड़े बनाने के लिए विधि श्रृंखला का उपयोग करने के लिए प्रोत्साहित करते हैं, अंत में श्रृंखला के अंत में चलने से पहले।

In [9]:
df.style.\
    applymap(color_negative_red).\
    apply(highlight_max)
Out[9]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

ऊपर हमने एक बार में प्रत्येक कॉलम में पास होने के लिए Styler.apply का उपयोग किया।

डिबगिंग टिप: यदि आपको अपनी शैली फ़ंक्शन लिखने में समस्या हो रही है, तो इसे DataFrame.apply में पास करने का प्रयास करें। आंतरिक रूप से, Styler.apply DataFrame.apply का उपयोग करता है इसलिए परिणाम समान होना चाहिए।

क्या होगा यदि आप पूरी तालिका में सिर्फ अधिकतम मूल्य को उजागर करना चाहते हैं? इंगित करने के लिए .apply(function, axis=None) का उपयोग करें कि आपका फ़ंक्शन पूरी तालिका चाहता है, एक बार में एक स्तंभ या पंक्ति नहीं। चलिए आगे कोशिश करते हैं।

हम श्रृंखला (या .apply(axis=0 or 1) ) या DataFames (से .apply(axis=None) ) को संभालने के लिए हमारे highlight-max को फिर से .apply(axis=None) । हम रंग को एडजस्ट करने की अनुमति भी देंगे, जो कि .apply , और .applymap कीवर्ड तर्कों के साथ प्रदर्शित करते हैं।

In [10]:
def highlight_max(data, color='yellow'):
    '''
    highlight the maximum in a Series or DataFrame
    '''
    attr = 'background-color: {}'.format(color)
    if data.ndim == 1:  # Series from .apply(axis=0) or axis=1
        is_max = data == data.max()
        return [attr if v else '' for v in is_max]
    else:  # from .apply(axis=None)
        is_max = data == data.max().max()
        return pd.DataFrame(np.where(is_max, attr, ''),
                            index=data.index, columns=data.columns)

Styler.apply(func, axis=None) का उपयोग करते Styler.apply(func, axis=None) , फ़ंक्शन को एक ही सूचकांक और स्तंभ लेबल के साथ एक DataFrame वापस करना होगा।

In [11]:
df.style.apply(highlight_max, color='darkorange', axis=None)
Out[11]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

बिल्डिंग स्टाइल्स सारांश

स्टाइल फ़ंक्शंस स्ट्रिंग्स को एक या अधिक सीएसएस attribute: value साथ लौटना चाहिए attribute: value अर्धविराम द्वारा सीमांकित attribute: value । उपयोग

  • Styler.applymap(func) शैलियों के लिए Styler.applymap(func)
  • Styler.apply(func, axis=0) शैलियों के लिए Styler.apply(func, axis=0)
  • Styler.apply(func, axis=1)
  • Styler.apply(func, axis=None) शैलियों के लिए Styler.apply(func, axis=None)

और महत्वपूर्ण रूप से func के इनपुट और आउटपुट आकृतियों का मेल होना चाहिए। यदि x इनपुट है तो func(x).shape == x.shape

महीन नियंत्रण: टुकड़ा करने की क्रिया

Styler.apply , और Styler.applymap दोनों ही एक subset कीवर्ड को स्वीकार करते हैं। यह आपको अपनी style फ़ंक्शन में उस तर्क को कोड किए बिना विशिष्ट पंक्तियों या स्तंभों पर शैलियों को लागू करने की अनुमति देता है।

सब्मिट करने के लिए दिया गया मान डेटाफ़्रेम को स्लाइस करने के समान व्यवहार करता है।

  • एक स्केलर को एक कॉलम लेबल के रूप में माना जाता है
  • एक सूची (या श्रृंखला या संख्यात्मक सरणी)
  • एक (row_indexer, column_indexer) को माना जाता है (row_indexer, column_indexer)

पिछले एक के लिए tuple के निर्माण के लिए pd.IndexSlice का उपयोग करने पर विचार करें।

In [12]:
df.style.apply(highlight_max, subset=['B', 'C', 'D'])
Out[12]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

पंक्ति और स्तंभ स्लाइसिंग के लिए, .loc लिए कोई भी मान्य अनुक्रमणिका काम करेगी।

In [13]:
df.style.applymap(color_negative_red,
                  subset=pd.IndexSlice[2:5, ['B', 'D']])
Out[13]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

केवल लेबल-आधारित स्लाइसिंग का समर्थन किया जाता है, न कि स्थितिगत।

यदि आपकी शैली फ़ंक्शन एक subset या axis कीवर्ड तर्क का उपयोग करती है, तो अपने कार्य को एक कीवर्ड के रूप में functools.partial , एक functools.partial में लपेटने पर विचार करें।

my_func2 = functools.partial(my_func, subset=42)

महीन नियंत्रण: प्रदर्शन मान

हम Styler में वास्तविक मूल्य से प्रदर्शन मूल्य को अलग करते हैं । प्रदर्शन मूल्य को नियंत्रित करने के लिए, पाठ प्रत्येक सेल में मुद्रित किया जाता है, Styler.format उपयोग Styler.format । कोशिकाओं को एक प्रारूप युक्ति स्ट्रिंग या एक कॉल करने योग्य के अनुसार स्वरूपित किया जा सकता है जो एकल मान लेता है और एक स्ट्रिंग लौटाता है।

In [14]:
df.style.format("{:.2%}")
Out[14]:
बी सी डी
0 100.00% 132.92% नेन% -31.63% -99.08%
1 200.00% -107.08% -143.87% 56.44% 29.57%
2 300.00% -162.64% 21.96% 67.88% 188.93%
3 400.00% 96.15% 10.40% -48.12% 85.02%
4 500.00% 145.34% 105.77% 16.56% 51.50%
5 600.00% -133.69% 56.29% 139.29% -6.33%
6 700.00% 12.17% 120.76% -0.20% 162.78%
7 800.00% 35.45% 103.75% -38.57% 51.98%
8 900.00% 168.66% -132.60% 142.90% -208.94%
9 1000.00% -12.98% 63.15% -58.65% 29.07%

विशिष्ट स्तंभों को प्रारूपित करने के लिए एक शब्दकोश का उपयोग करें।

In [15]:
df.style.format({'B': "{:0<4.0f}", 'D': '{:+.2f}'})
Out[15]:
बी सी डी
0 1 1000 नेन -0.32 -0.९९,०८१
1 2 -100 -१.४३,८७१ 0.56 0.295722
2 3 -200 0.219565 0.68 १.८८,९२७
3 4 1000 0.104011 -0.48 0.850229
4 5 1000 १.०५,७७४ 0.17 0.515018
5 6 -100 0.562861 1.39 -0.०,६३,३२८
6 7 0000 1.2076 -0.00 1.6278
7 8 0000 १.०३,७५३ -0.39 0.519818
8 9 2000 -१.३२,५९६ 1.43 -२.०८,९३५
9 10 -000 0.631523 -0.59 0.२९,०७२

या अधिक लचीली हैंडलिंग के लिए एक कॉल करने योग्य (या कॉलबल्स का शब्दकोश) में पास करें।

In [16]:
df.style.format({"B": lambda x: "±{:.2f}".format(abs(x))})
Out[16]:
बी सी डी
0 1 ± 1.33 नेन -0.३१,६२८ -0.९९,०८१
1 2 ± 1.07 -१.४३,८७१ 0.564417 0.295722
2 3 ± 1.63 0.219565 0.678805 १.८८,९२७
3 4 ± 0.96 0.104011 -0.४,८१,१६५ 0.850229
4 5 ± 1.45 १.०५,७७४ 0.165562 0.515018
5 6 ± 1.34 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 ± 0.12 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 ± 0.35 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 ± 1.69 -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 ± 0.13 0.631523 -0.५,८६,५३८ 0.२९,०७२

निर्मित शैलियाँ

अंत में, हम उम्मीद करते हैं कि कुछ स्टाइलिंग फंक्शन काफी सामान्य होंगे, जिन्हें हमने कुछ "बिल्ट-इन" Styler , इसलिए आपको उन्हें खुद लिखने की ज़रूरत नहीं है।

In [17]:
df.style.highlight_null(null_color='red')
Out[17]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

आप background_gradient पद्धति से "हीटमैप्स" बना सकते हैं। इनको matplotlib की आवश्यकता होती है, और हम एक अच्छा कॉलोरामैप प्राप्त करने के लिए Seaborn का उपयोग करेंगे।

In [18]:
import seaborn as sns

cm = sns.light_palette("green", as_cmap=True)

s = df.style.background_gradient(cmap=cm)
s
/opt/conda/envs/pandas/lib/python3.6/site-packages/matplotlib/colors.py:504: RuntimeWarning: invalid value encountered in less
  xa[xa < 0] = -1
Out[18]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

Styler.background_gradient कीवर्ड तर्कों को low और high लेता है। मोटे तौर पर ये आपके डेटा की सीमा को low और high प्रतिशत तक बढ़ाते हैं ताकि जब हम रंगों को परिवर्तित करते हैं, तो कॉलोर्मैप का संपूर्ण उपयोग नहीं किया जाता है। यह उपयोगी है ताकि आप वास्तव में अभी भी पाठ पढ़ सकें।

In [19]:
# Uses the full color range
df.loc[:4].style.background_gradient(cmap='viridis')
/opt/conda/envs/pandas/lib/python3.6/site-packages/matplotlib/colors.py:504: RuntimeWarning: invalid value encountered in less
  xa[xa < 0] = -1
Out[19]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
In [20]:
# Compress the color range
(df.loc[:4]
    .style
    .background_gradient(cmap='viridis', low=.5, high=0)
    .highlight_null('red'))
/opt/conda/envs/pandas/lib/python3.6/site-packages/matplotlib/colors.py:504: RuntimeWarning: invalid value encountered in less
  xa[xa < 0] = -1
Out[20]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018

वहाँ भी .highlight_min और .highlight_max

In [21]:
df.style.highlight_max(axis=0)
Out[21]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

स्टाइल का उपयोग तब करें जब स्टाइल वास्तव में मूल्यों पर निर्भर न हो।

In [22]:
df.style.set_properties(**{'background-color': 'black',
                           'color': 'lawngreen',
                           'border-color': 'white'})
Out[22]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

बार चार्ट

आप अपने डेटाफ़्रेम में "बार चार्ट" शामिल कर सकते हैं।

In [23]:
df.style.bar(subset=['A', 'B'], color='#d65f5f')
Out[23]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

संस्करण 0.20.0 में नया बार चार्ट को और अधिक अनुकूलित करने की क्षमता है: अब आप df.style.bar को शून्य या मिडपॉइंट मान पर केंद्रित कर सकते हैं (बाईं ओर न्यूनतम मान रखने के पहले से ही मौजूद तरीके के अलावा सेल), और आप [color_negative, color_positive] की सूची पास कर सकते हैं।

यहां बताया गया है कि आप नए align='mid' विकल्प के साथ ऊपर कैसे बदल सकते हैं:

In [24]:
df.style.bar(subset=['A', 'B'], align='mid', color=['#d65f5f', '#5fba7d'])
Out[24]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

निम्नलिखित उदाहरण का लक्ष्य नए संरेखित विकल्पों के व्यवहार पर प्रकाश डालना है:

In [25]:
import pandas as pd
from IPython.display import HTML

# Test series
test1 = pd.Series([-100,-60,-30,-20], name='All Negative')
test2 = pd.Series([10,20,50,100], name='All Positive')
test3 = pd.Series([-10,-5,0,90], name='Both Pos and Neg')

head = """
<table>
    <thead>
        <th>Align</th>
        <th>All Negative</th>
        <th>All Positive</th>
        <th>Both Neg and Pos</th>
    </thead>
    </tbody>

"""

aligns = ['left','zero','mid']
for align in aligns:
    row = "<tr><th>{}</th>".format(align)
    for serie in [test1,test2,test3]:
        s = serie.copy()
        s.name=''
        row += "<td>{}</td>".format(s.to_frame().style.bar(align=align,
                                                           color=['#d65f5f', '#5fba7d'],
                                                           width=100).render()) #testn['width']
    row += '</tr>'
    head += row

head+= """
</tbody>
</table>"""


HTML(head)
Out[25]:
संरेखित सभी नकारात्मक सभी सकारात्मक नकारात्मक और स्थिति दोनों
बाएं
0 -100
1 -60
2 -30
3 -20
0 10
1 20
2 50
3 100
0 -10
1 -5
2 0
3 90
शून्य
0 -100
1 -60
2 -30
3 -20
0 10
1 20
2 50
3 100
0 -10
1 -5
2 0
3 90
मध्य
0 -100
1 -60
2 -30
3 -20
0 10
1 20
2 50
3 100
0 -10
1 -5
2 0
3 90

शेयरिंग स्टाइल्स

मान लें कि आपके पास DataFrame के लिए एक प्यारी शैली है, और अब आप उसी शैली को दूसरे DataFrame पर लागू करना चाहते हैं। df1.style.export साथ शैली निर्यात करें, और इसे df1.style.set के साथ दूसरे DataFrame पर आयात करें

In [26]:
df2 = -df
style1 = df.style.applymap(color_negative_red)
style1
Out[26]:
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२
In [27]:
style2 = df2.style
style2.use(style1.export())
style2
Out[27]:
बी सी डी
0 -1 -१.३२,९२१ नेन 0.३१,६२८ 0.९९,०८१
1 -2 १.०७,०८२ १.४३,८७१ -0.५,६४,४१७ -0.२,९५,७२२
2 -3 1.6264 -0.२,१९,५६५ -0.६,७८,८०५ -१.८८,९२७
3 -4 -0.९,६१,५३८ -0.१,०४,०११ 0.481165 -0.८,५०,२२९
4 -5 -१.४५,३४२ -१.०५,७७४ -0.१,६५,५६२ -0.५,१५,०१८
5 -6 १.३३,६९४ -0.५,६२,८६१ -१.३९,२८५ 0.063328
6 -7 -0.१,२१,६६८ -१.२,०७६ 0.00204021 -१.६,२७८
7 -8 -0.३,५४,४९३ -१.०३,७५३ 0.385684 -0.५,१९,८१८
8 -9 -१.६८,६५८ १.३२,५९६ -१.४२,८९८ २.०८,९३५
9 -10 0.१२,९८२ -0.६,३१,५२३ 0.586538 -0.२९,०७२

ध्यान दें कि आप शैलियों को जानते हुए भी साझा करने में सक्षम हैं। शैलियों का नए डेटाफ्रेम पर पुनर्मूल्यांकन किया जाता है, जिसका वे use कर रहे use

अन्य विकल्प

आपने डेटा-चालित स्टाइल के लिए कुछ तरीके देखे हैं। Styler शैलियों के लिए कुछ अन्य विकल्प भी प्रदान करता है जो डेटा पर निर्भर नहीं होते हैं।

  • शुद्धता
  • कैप्शन
  • टेबल-वाइड शैलियों
  • सूचकांक या स्तंभों को छिपाना

इनमें से प्रत्येक को दो तरीकों से निर्दिष्ट किया जा सकता है:

  • Styler.__init__ लिए एक कीवर्ड तर्क
  • .set_ या .hide_ विधियों में से एक को कॉल करें, जैसे .set_caption या .hide_columns

उपयोग करने का सबसे अच्छा तरीका संदर्भ पर निर्भर करता है। कई स्टाइल डेटाफ़्रेम का निर्माण करते समय Styler कंस्ट्रक्टर का उपयोग करें जो सभी समान गुणों को साझा करना चाहिए। संवादात्मक उपयोग के लिए, .set_ और .hide_ विधियाँ अधिक सुविधाजनक हैं।

शुद्धता

आप पंडों के नियमित प्रदर्शन display.precision विकल्प का उपयोग करके फ़्लोट्स की शुद्धता को नियंत्रित कर सकते हैं।

In [28]:
with pd.option_context('display.precision', 2):
    html = (df.style
              .applymap(color_negative_red)
              .apply(highlight_max))
html
Out[28]:
बी सी डी
0 1 1.3 नेन -0.32 -0.99
1 2 -1.1 -1.4 0.56 0.3
2 3 -1.6 0.22 0.68 1.9
3 4 0.96 0.1 -0.48 0.85
4 5 1.5 1.1 0.17 0.52
5 6 -1.3 0.56 1.4 -0.063
6 7 0.12 1.2 -0.002 1.6
7 8 0.35 1 -0.39 0.52
8 9 1.7 -1.3 1.4 -2.1
9 10 -0.13 0.63 -0.59 0.29

या एक set_precision विधि के माध्यम से।

In [29]:
df.style\
  .applymap(color_negative_red)\
  .apply(highlight_max)\
  .set_precision(2)
Out[29]:
बी सी डी
0 1 1.3 नेन -0.32 -0.99
1 2 -1.1 -1.4 0.56 0.3
2 3 -1.6 0.22 0.68 1.9
3 4 0.96 0.1 -0.48 0.85
4 5 1.5 1.1 0.17 0.52
5 6 -1.3 0.56 1.4 -0.063
6 7 0.12 1.2 -0.002 1.6
7 8 0.35 1 -0.39 0.52
8 9 1.7 -1.3 1.4 -2.1
9 10 -0.13 0.63 -0.59 0.29

सटीक सेट करना केवल मुद्रित संख्या को प्रभावित करता है; पूर्ण-सटीक मान हमेशा आपकी शैली फ़ंक्शन के लिए दिए जाते हैं। आप हमेशा df.round(2).style उपयोग कर सकते हैं। यदि आप शुरू से ही गोल करना चाहते हैं।

कैप्शन

नियमित टेबल कैप्शन को कुछ तरीकों से जोड़ा जा सकता है।

In [30]:
df.style.set_caption('Colormaps, with a caption.')\
    .background_gradient(cmap=cm)
/opt/conda/envs/pandas/lib/python3.6/site-packages/matplotlib/colors.py:504: RuntimeWarning: invalid value encountered in less
  xa[xa < 0] = -1
Out[30]:
एक कैप्शन के साथ, Colormaps।
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

टेबल शैलियाँ

आपके पास अगला विकल्प "टेबल स्टाइल" है। ये ऐसी शैलियाँ हैं जो संपूर्ण रूप से तालिका पर लागू होती हैं, लेकिन डेटा को नहीं देखती हैं। छद्म चयनकर्ताओं सहित कुछ सिटलिंग, जैसे :hover उपयोग केवल इस तरह से किया जा सकता है।

In [31]:
from IPython.display import HTML

def hover(hover_color="#ffff99"):
    return dict(selector="tr:hover",
                props=[("background-color", "%s" % hover_color)])

styles = [
    hover(),
    dict(selector="th", props=[("font-size", "150%"),
                               ("text-align", "center")]),
    dict(selector="caption", props=[("caption-side", "bottom")])
]
html = (df.style.set_table_styles(styles)
          .set_caption("Hover to highlight."))
html
Out[31]:
उजागर करने के लिए हॉवर।
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

table_styles शब्दकोशों की एक सूची होनी चाहिए। प्रत्येक शब्दकोश में selector और props कुंजी होनी चाहिए। selector लिए मान एक वैध सीएसएस चयनकर्ता होना चाहिए। याद रखें कि सभी शैलियाँ पहले से ही एक id से जुड़ी हुई हैं, प्रत्येक Styler लिए अद्वितीय है। यह चयनकर्ता उस id अतिरिक्त है। props लिए मान ('attribute', 'value') के टपल की सूची होनी चाहिए।

table_styles बेहद लचीली हैं, लेकिन हाथ से टाइप करने में मज़ा नहीं। हम कुछ उपयोगी लोगों को या तो पंडों में इकट्ठा करने की उम्मीद करते हैं, या एक नए पैकेज में बेहतर है जो यहां शीर्ष टूल बनाता है।

सूचकांक या कॉलम को छिपाना

सूचकांक को Styler.hide_index कॉल करके रेंडरिंग से छिपाया जा सकता है। कॉलम को Styler.hide_columns को कॉल Styler.hide_columns और कॉलम के नाम से या कॉलम के एक स्लाइस को पास करके रेंडरिंग से छिपाया जा सकता है।

In [32]:
df.style.hide_index()
Out[32]:
बी सी डी
1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२
In [33]:
df.style.hide_columns(['C','D'])
Out[33]:
बी
0 1 १.३२,९२१ -0.९९,०८१
1 2 -१.०७,०८२ 0.295722
2 3 -१.६,२६४ १.८८,९२७
3 4 0.961538 0.850229
4 5 १.४५,३४२ 0.515018
5 6 -१.३३,६९४ -0.०,६३,३२८
6 7 0.121668 1.6278
7 8 0.354493 0.519818
8 9 १.६८,६५८ -२.०८,९३५
9 10 -0.१२,९८२ 0.२९,०७२

सीएसएस कक्षाएं

कुछ सीएसएस कक्षाएं कोशिकाओं से जुड़ी होती हैं।

  • अनुक्रमणिका और स्तंभ नाम में index_name और level<k> जहाँ k एक MultiIndex में इसका स्तर है
  • सूचकांक लेबल कोशिकाओं में शामिल हैं
    • row_heading
    • row<n> जहां n पंक्ति की संख्यात्मक स्थिति है
    • level<k> जहां k एक मल्टीआईंडेक्स में स्तर है
  • कॉलम लेबल कोशिकाओं में शामिल हैं
    • col_heading
    • col<n> जहां n कॉलम की संख्यात्मक स्थिति है
    • level<k> जहां k एक मल्टीआईंडेक्स में स्तर है
  • रिक्त कोशिकाओं में blank शामिल हैं
  • डेटा सेल में data शामिल data

सीमाएं

  • केवल DataFrame (use Series.to_frame().style)
  • सूचकांक और कॉलम अद्वितीय होना चाहिए
  • कोई बड़ी प्रतिफल, और प्रदर्शन महान नहीं है; यह सारांश डाटाफ्रेम के लिए अभिप्रेत है
  • आप केवल मूल्यों को स्टाइल कर सकते हैं , इंडेक्स या कॉलम को नहीं
  • आप केवल शैलियों को लागू कर सकते हैं, आप नई HTML संस्थाओं को सम्मिलित नहीं कर सकते

इनमें से कुछ को भविष्य में संबोधित किया जाएगा।

शर्तें

  • शैली समारोह: एक समारोह जो Styler.apply या Styler.applymap में पारित हो गया है और 'css attribute: value' जैसे मान लौटाता है
  • बिलिन शैली कार्य: स्टाइल फ़ंक्शंस जो Styler पर विधियां हैं
  • तालिका शैली: दो कुंजी selector और props साथ एक शब्दकोश। selector CSS चयनकर्ता है जो props लागू होगा। props (attribute, value) टुपल्स की एक सूची है। तालिका शैलियों की एक सूची Styler में पारित हुई।

मजेदार चीजें

यहाँ कुछ दिलचस्प उदाहरण हैं।

Styler विगेट्स के साथ बहुत अच्छी तरह से इंटरैक्ट करता है। यदि आप नोटबुक को चलाने के बजाय इसे ऑनलाइन देख रहे हैं, तो आप रंग पैलेट को अंतःक्रियात्मक रूप से समायोजित करने से चूक रहे हैं।

In [34]:
from IPython.html import widgets
@widgets.interact
def f(h_neg=(0, 359, 1), h_pos=(0, 359), s=(0., 99.9), l=(0., 99.9)):
    return df.style.background_gradient(
        cmap=sns.palettes.diverging_palette(h_neg=h_neg, h_pos=h_pos, s=s, l=l,
                                            as_cmap=True)
    )
/opt/conda/envs/pandas/lib/python3.6/site-packages/matplotlib/colors.py:504: RuntimeWarning: invalid value encountered in less
  xa[xa < 0] = -1
बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२
In [35]:
def magnify():
    return [dict(selector="th",
                 props=[("font-size", "4pt")]),
            dict(selector="td",
                 props=[('padding', "0em 0em")]),
            dict(selector="th:hover",
                 props=[("font-size", "12pt")]),
            dict(selector="tr:hover td:hover",
                 props=[('max-width', '200px'),
                        ('font-size', '12pt')])
]
In [36]:
np.random.seed(25)
cmap = cmap=sns.diverging_palette(5, 250, as_cmap=True)
bigdf = pd.DataFrame(np.random.randn(20, 25)).cumsum()

bigdf.style.background_gradient(cmap, axis=1)\
    .set_properties(**{'max-width': '80px', 'font-size': '1pt'})\
    .set_caption("Hover to magnify")\
    .set_precision(2)\
    .set_table_styles(magnify())
Out[36]:
होवर करने के लिए होवर करें
0 1 2 3 4 5 6 7 8 9 10 1 1 12 13 14 15 16 17 18 19 20 21 22 23 24
0 0.23 1 -0.84 -0.59 -0.96 -0.22 -0.62 1.8 -2.1 0.87 -0.92 -0.23 2.2 -1.3 0.076 -1.2 1.2 -1 1.1 -0.42 2.3 -2.6 2.8 0.68 -1.6
1 -1.7 1.6 -1.1 -1.1 1 0.0037 -2.5 3.4 -1.7 1.3 -0.52 -0.015 1.5 -1.1 -1.9 -1.1 -0.68 -0.81 0.35 -0.055 1.8 -2.8 2.3 0.78 0.44
2 -0.65 3.2 -1.8 0.52 2.2 -0.37 -3 3.7 -1.9 2.5 0.21 -0.24 -0.1 -0.78 -3 -0.82 -0.21 -0.23 0.86 -0.68 1.4 -4.9 3 1.9 0.61
3 -1.6 3.7 -2.3 0.43 4.2 -0.43 -3.9 4.2 -2.1 1.1 0.12 0.6 -0.89 0.27 -3.7 -2.7 -0.31 -1.6 1.4 -1.8 0.91 -5.8 2.8 2.1 0.28
4 -3.3 4.5 -1.9 -1.7 5.2 -1 -3.8 4.7 -0.72 1.1 -0.18 0.83 -0.22 -1.1 -4.3 -2.9 -0.97 -1.8 1.5 -1.8 2.2 -6.3 3.3 2.5 2.1
5 -0.84 4.2 -1.7 -2 5.3 -0.99 -4.1 3.9 -1.1 -0.94 1.2 0.087 -1.8 -0.11 -4.5 -0.85 -2.1 -1.4 0.8 -1.6 1.5 -6.5 2.8 2.1 3.8
6 -0.74 5.4 -2.1 -1.1 4.2 -1.8 -3.2 3.8 -3.2 -1.2 0.34 0.57 -1.8 0.54 -4.4 -1.8 -4 -2.6 -0.2 -4.7 1.9 -8.5 3.3 2.5 5.8
7 -0.44 4.7 -2.3 -0.21 5.9 -2.6 -1.8 5.5 -4.5 -3.2 -1.7 0.18 0.11 0.036 -6 -0.45 -6.2 -3.9 0.71 -3.9 0.67 -7.3 3 3.4 6.7
8 0.92 5.8 -3.3 -0.65 6 -3.2 -1.8 5.6 -3.5 -1.3 -1.6 0.82 -2.4 -0.4 -6.1 -0.52 -6.6 -3.5 -0.043 -4.6 0.51 -5.8 3.2 2.4 5.1
9 0.38 5.5 -4.5 -0.8 7.1 -2.6 -0.44 5.3 -2 -0.33 -0.8 0.26 -3.4 -0.82 -6.1 -2.6 -8.5 -4.5 0.41 -4.7 1.9 -6.9 2.1 3 5.2
10 2.1 5.8 -3.9 -0.98 7.8 -2.5 -0.59 5.6 -2.2 -0.71 -0.46 1.8 -2.8 0.48 -6 -3.4 -7.8 -5.5 -0.7 -4.6 -0.52 -7.7 1.5 5 5.8
1 1 1.9 4.5 -2.2 -1.4 5.9 -0.49 0.017 5.8 -1 -0.6 0.49 2 -1.5 1.9 -5.9 -4.5 -8.2 -3.4 -2.2 -4.3 -1.2 -7.9 1.4 5.3 5.8
12 3.2 4.2 -3.1 -2.3 5.9 -2.6 0.33 6.7 -2.8 -0.2 1.9 2.6 -1.5 0.75 -5.3 -4.5 -7.6 -2.9 -2.2 -4.8 -1.1 -9 2.1 6.4 5.6
13 2.3 4.5 -3.9 -2 6.8 -3.3 -2.2 8 -2.6 -0.8 0.71 2.3 -0.16 -0.46 -5.1 -3.8 -7.6 -4 0.33 -3.7 -1 -8.7 2.5 5.9 6.7
14 3.8 4.3 -3.9 -1.6 6.2 -3.2 -1.5 5.6 -2.9 -0.33 -0.97 1.7 3.6 0.29 -4.2 -4.1 -6.7 -4.5 -2.2 -2.4 -1.6 -9.4 3.4 6.1 7.5
15 5.6 5.3 -4 -2.3 5.9 -3.3 -1 5.7 -3.1 -0.33 -1.2 2.2 4.2 1 -3.2 -4.3 -5.7 -4.4 -2.3 -1.4 -1.2 -1 1 2.6 6.7 5.9
16 4.1 4.3 -2.4 -3.3 6 -2.5 -0.47 5.3 -4.8 1.6 0.23 0.099 5.8 1.8 -3.1 -3.9 -5.5 -3 -2.1 -1.1 -0.56 -13 2.1 6.2 4.9
17 5.6 4.6 -3.5 -3.8 6.6 -2.6 -0.75 6.6 -4.8 3.6 -0.29 0.56 5.8 2 -2.3 -2.3 -5 -3.2 -3.1 -2.4 0.84 -13 3.6 7.4 4.7
18 6 5.8 -2.8 -4.2 7.1 -3.3 -1.2 7.9 -4.9 1.4 -0.63 0.35 7.5 0.87 -1.5 -2.1 -4.2 -2.5 -2.5 -2.9 1.9 -9.7 3.4 7.1 4.4
19 4 6.2 -4.1 -4.1 7.2 -4.1 -1.5 6.5 -5.2 -0.24 0.0072 1.2 6.4 -2 -2.6 -1.7 -5.2 -3.3 -2.9 -1.7 1.6 -1 1 2.8 7.5 3.9

एक्सेल में भेजे

संस्करण में नया 0.20.0

प्रायोगिक: यह एक नई विशेषता है और अभी भी विकास के अधीन है। हम सुविधाएँ जोड़ रहे हैं और संभवतः भविष्य के रिलीज़ में परिवर्तन कर रहे हैं। हमें आपकी प्रतिक्रिया सुनना अच्छा लगेगा।

कुछ समर्थन OpenPyXL या XlsxWriter इंजन का उपयोग करके Excel कार्यपत्रकों के लिए DataFrames को निर्यात करने के लिए उपलब्ध है। CSS2.2 संपत्तियों में शामिल हैं:

  • background-color
  • border-style , border-width , border-color और उनके { top , right , bottom , left वेरिएंट}
  • color
  • font-family
  • font-style
  • font-weight
  • text-align
  • text-decoration
  • vertical-align
  • white-space: nowrap

वर्तमान में #rgb या #rgb रंग और हेक्स रंगों के CSS2 नाम वर्तमान में समर्थित हैं।

In [37]:
df.style.\
    applymap(color_negative_red).\
    apply(highlight_max).\
    to_excel('styled.xlsx', engine='openpyxl')

आउटपुट का स्क्रीनशॉट:

एक्सेल स्प्रेडशीट स्टाइलफ्रेमफ्रेम के साथ

एक्सेल स्प्रेडशीट स्टाइलफ्रेमफ्रेम के साथ

तानाना

पांडा का मूल है, और रहेगा इसका "उच्च-प्रदर्शन, उपयोग में आसान डेटा संरचना"। इसे ध्यान में रखते हुए, हम आशा करते हैं कि DataFrame.style दो लक्ष्यों को पूरा करता है

  • एक एपीआई प्रदान करें जो अंतःक्रियात्मक रूप से उपयोग करने के लिए प्रसन्न है और कई कार्यों के लिए "पर्याप्त अच्छा" है
  • निर्माण के लिए समर्पित पुस्तकालयों के लिए नींव प्रदान करें

यदि आप इसके शीर्ष पर एक महान पुस्तकालय का निर्माण करते हैं, तो हमें बताएं और हम इसे link करेंगे।

उपवर्गीकरण

यदि डिफ़ॉल्ट टेम्पलेट आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप स्टाइलर को उप-वर्ग कर सकते हैं और टेम्पलेट को बढ़ा या बढ़ा सकते हैं। हम प्रत्येक तालिका से पहले एक कस्टम हेडर डालने के लिए डिफ़ॉल्ट टेम्पलेट को विस्तारित करने का एक उदाहरण दिखाएंगे।

In [38]:
from jinja2 import Environment, ChoiceLoader, FileSystemLoader
from IPython.display import HTML
from pandas.io.formats.style import Styler
In [39]:
%mkdir templates
mkdir: cannot create directory ‘templates’: File exists

यह अगली सेल कस्टम टेम्पलेट लिखती है। हम टेम्पलेट html.tpl विस्तार करते हैं, जो पांडा के साथ आता है।

In [40]:
%%file templates/myhtml.tpl
{% extends "html.tpl" %}
{% block table %}
<h1>{{ table_title|default("My Table") }}</h1>
{{ super() }}
{% endblock table %}
Overwriting templates/myhtml.tpl

अब जब हमने एक खाका बना लिया है, तो हमें इसके बारे में जानने वाले Styler उपवर्ग स्थापित करने की आवश्यकता है।

In [41]:
class MyStyler(Styler):
    env = Environment(
        loader=ChoiceLoader([
            FileSystemLoader("templates"),  # contains ours
            Styler.loader,  # the default
        ])
    )
    template = env.get_template("myhtml.tpl")

ध्यान दें कि हम अपने पर्यावरण के लोडर में मूल लोडर को शामिल करते हैं। ऐसा इसलिए है क्योंकि हम मूल टेम्पलेट का विस्तार करते हैं, इसलिए जिंजा वातावरण को खोजने में सक्षम होने की आवश्यकता है।

अब हम उस कस्टम स्टाइलर का उपयोग कर सकते हैं। यह __init__ एक DataFrame लेता है।

In [42]:
MyStyler(df)
Out[42]:

मेरी टेबल

बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

हमारा कस्टम टेम्प्लेट table_title कीवर्ड स्वीकार करता है। हम .render विधि में मान प्रदान कर सकते हैं।

In [43]:
HTML(MyStyler(df).render(table_title="Extending Example"))
Out[43]:

उदाहरण प्रस्तुत करना

बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

सुविधा के लिए, हम Styler.from_custom_template विधि प्रदान करते हैं जो कस्टम उपवर्ग के समान है।

In [44]:
EasyStyler = Styler.from_custom_template("templates", "myhtml.tpl")
EasyStyler(df)
Out[44]:

मेरी टेबल

बी सी डी
0 1 १.३२,९२१ नेन -0.३१,६२८ -0.९९,०८१
1 2 -१.०७,०८२ -१.४३,८७१ 0.564417 0.295722
2 3 -१.६,२६४ 0.219565 0.678805 १.८८,९२७
3 4 0.961538 0.104011 -0.४,८१,१६५ 0.850229
4 5 १.४५,३४२ १.०५,७७४ 0.165562 0.515018
5 6 -१.३३,६९४ 0.562861 १.३९,२८५ -0.०,६३,३२८
6 7 0.121668 1.2076 -0.०,०२,०४,०२१ 1.6278
7 8 0.354493 १.०३,७५३ -0.३,८५,६८४ 0.519818
8 9 १.६८,६५८ -१.३२,५९६ १.४२,८९८ -२.०८,९३५
9 10 -0.१२,९८२ 0.631523 -0.५,८६,५३८ 0.२९,०७२

यहाँ टेम्पलेट संरचना है:

In [45]:
with open("template_structure.html") as f:
    structure = f.read()

HTML(structure)
Out[45]:
before_style
अंदाज
<style type="text/css">
table_styles
before_cellstyle
cellstyle
</style>
before_table
तालिका
<table ...>
शीर्षक
thead
before_head_rows
head_tr (हेडर पर लूप)
after_head_rows
tbody
before_rows
tr (डेटा पंक्तियों पर लूप)
after_rows
</table>
after_table

अधिक जानकारी के लिए GitHub रेपो में टेम्पलेट देखें।

Original text