पाइथन पंडस एग्रीगेशन रिजल्ट्स से साइंटिफिक नोटिफिकेशन को दबाएं


162

पंडों में एक ग्रुपबी ऑपरेशन से आउटपुट के लिए प्रारूप को कैसे संशोधित किया जा सकता है जो बहुत बड़ी संख्या के लिए वैज्ञानिक संकेतन पैदा करता है?

मुझे पता है कि अजगर में स्ट्रिंग प्रारूपण कैसे किया जाता है, लेकिन जब इसे यहां लागू करने की बात आती है तो मुझे नुकसान होता है।

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

यह वैज्ञानिक संकेतन को दबा देता है यदि मैं स्ट्रिंग में परिवर्तित करता हूं, लेकिन अब मैं सोच रहा हूं कि कैसे स्ट्रिंग को प्रारूपित करें और दशमलव जोड़ें।

sum_sales_dept.astype(str)


3
मैंने उस प्रश्न को देखा, लेकिन मुझे यकीन नहीं है कि यह कैसे मेरी मदद करता है। मैं अभी वर्तमान dtype को संरक्षित करना चाह रहा हूं जो कि फ्लोट है और केवल वैज्ञानिक संकेतन के बजाय परिणाम में सभी दशमलव दिखाएगा।
क्षितिज १।

वह शायद सिर्फ एक प्रदर्शन की चीज है। लेकिन अगर आपको लगता है कि आपकी समस्या के बारे में कुछ खास है, तो आप दान के लिंक में से एक से अलग हो जाते हैं, तो आपको अपनी समस्या के बारे में अधिक जानकारी पोस्ट करने की जरूरत है, अधिमानतः एक छोटे डेटासेट के साथ जो समस्या को पुन: उत्पन्न करता है। इसके अलावा dtypesआपके परिणाम पर क्या हैं ?
टॉमएग्सपर्गर

जवाबों:


237

दी, टिप्पणी में मैंने जो जवाब दिया, वह बहुत उपयोगी नहीं है। आप अपने स्वयं के स्ट्रिंग कनवर्टर को इस तरह निर्दिष्ट कर सकते हैं।

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)

In [28]: Series(np.random.randn(3))*1000000000
Out[28]: 
0    -757322420.605
1   -1436160588.997
2   -1235116117.064
dtype: float64

मुझे यकीन नहीं है कि ऐसा करने का पसंदीदा तरीका है, लेकिन यह काम करता है।

सौंदर्य प्रयोजनों के लिए विशुद्ध रूप से तार पर संख्याओं को परिवर्तित करना एक बुरे विचार की तरह लगता है, लेकिन अगर आपके पास एक अच्छा कारण है, तो यह एक तरीका है:

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]: 
0     0.026
1    -0.482
2    -0.694
dtype: object

1
धन्यवाद डैन। क्या आप जानते हैं कि पांडा विकल्पों को कैसे रीसेट किया जाता है?
जोश

1
@Josh अस्थायी रूप से पांडा में विकल्प सेट करने के लिए, आप pandas.pydata.org/pandas-docs/stable/generated/…pandas.option_context (देखें ) का उपयोग कर सकते हैं ।
म्यूएलार्केनस

यह सौंदर्य प्रयोजनों के लिए नहीं, बल्कि बड़े संख्यात्मक डेटाफ़ॉर्म पर दृश्य कॉर्टेक्स के माध्यम से जानकारी के त्वरित स्किमिंग के लिए अक्सर होता है।
18an

pd.set_option ('display.float_format', लैम्ब्डा x: '% .3f'% x) ने मेरे लिए भी काम किया
ड्राइव_स्पाईडर

5
यह काम करता है और आप नए एफ-स्ट्रिंग नोटेशन का उपयोग भी कर सकते हैं। जैसे pd.set_option('display.float_format', lambda x: f'{x:,.3f}')अगर आप एक हजार विभाजक चाहते हैं।
576i

87

यहाँ यह करने का एक और तरीका है, डैन एलन के जवाब के समान लेकिन लैंबडा फ़ंक्शन के बिना:

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

या

>>> pd.set_option('display.float_format', '{:.2f}'.format)

1
मुझे लगता है कि एक प्रारूप स्ट्रिंग का उपयोग टीम के सदस्यों के लिए अधिक स्वीकार्य होगा जो पायथन से कम परिचित हैं, और लैंबडा कार्यों को समझ नहीं सकते हैं।
स्टीवन सी। हॉवेल

23

आप केवल विशिष्ट डेटाफ़्रेम के लिए वैज्ञानिक संकेतन को दबाने के लिए गोल फ़ंक्शन का उपयोग कर सकते हैं:

df1.round(4)

या आप इसे विश्व स्तर पर दबा सकते हैं:

pd.options.display.float_format = '{:.4f}'.format

11

यदि आप एक ज्यूपिटर नोटबुक सेल में डेटा फ़्रेम के आउटपुट को स्टाइल करना चाहते हैं, तो आप प्रदर्शन शैली को प्रति-डेटाफ़्रेम आधार पर सेट कर सकते हैं:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

यहां छवि विवरण दर्ज करें

दस्तावेज़ यहाँ देखें ।


0

यदि आप csvfile csv.writer के भाग के रूप में मानों का उपयोग करना चाहते हैं, तो सूची बनाने से पहले संख्याओं को स्वरूपित किया जा सकता है:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.