2012-01-11 14 views
9

एक्सेल फ़ाइलों से डेटा पढ़ने के लिए मैं xlrd का उपयोग करता हूं।एक्सेल फाइलों से इंटीजर फ्लोट बन जाते हैं?

फ़ाइलों में संग्रहीत पूर्णांक के लिए, मान 63 करते हैं, xlrd प्रकार number की 63.0 के रूप में यह व्याख्या करता है।

xlrd63 को एक पूर्णांक के रूप में क्यों नहीं पहचान सकता?

मान लें sheet.row(1)[0].value हमें 63.0 देता है। मैं इसे वापस 63 में कैसे परिवर्तित कर सकता हूं।

+0

यह सिर्फ int (yourfloat) होगा, है ना? http://docs.python.org/library/functions.html#int। मैं एक उत्तर के रूप में पोस्ट नहीं करूंगा - मुझे लगता है कि मैं आप का अपमान कर सकता हूं और शायद कुछ याद किया। – stackuser10210

+0

@ stackuser10210 मुझे आश्चर्य है कि क्यों स्प्रेड शीट में पूर्णांक 63 63.0 हो जाता है। –

+0

कोई विचार नहीं। मैं xlrd से परिचित नहीं हूं और मैंने कभी ऐसा नहीं किया है। अगर वे एक्सेल में वास्तव में पूर्णांक हैं (यानी, ए 1 = 63.0, बी 1 = इंट (ए 1), और आपको बी 1 से 63.0 मिल रहा है, तो मैं समस्या को समझ सकता हूं। क्षमा करें मेरे पास कोई जवाब नहीं है। – stackuser10210

उत्तर

10

documentation में विभिन्न सेल प्रकारों को देखते हुए, ऐसा लगता है कि कोशिकाओं के लिए कोई पूर्णांक प्रकार नहीं है, वे केवल फ़्लोट हैं। इसलिए, यही कारण है कि जब आप एक पूर्णांक लिखा था तब भी आप वापस तैर रहे हैं।

एक पूर्णांक के लिए एक नाव को बदलने के लिए बस का उपयोग int:

>>> int(63.0) 
63 
>>> int(sheet.row(1)[0].value) 
63 
+0

वूली टर्मिनोलॉजी। '63.0' पहले से ही एक पूर्णांक है।' int (some_float) 'एक पूर्णांक के लिए अपने तर्क को छोटा करता है और उस मान को' int 'ऑब्जेक्ट के रूप में देता है। –

+0

लेकिन कैसे क्या आप जानते हैं कि यह एक फ्लोट या int है? –

2

मैं इस मणि के xlrd डॉक्स से याद दिला रहा हूँ:

तिथियां एक्सेल स्प्रेडशीट में

हकीकत में, ऐसी कोई चीज नहीं है। आपके पास फ्लोटिंग पॉइंट नंबर और पवित्र आशा है।

यह पूर्णांक के बारे में भी सच है। शायद पवित्र आशा से कम।

+0

दिलचस्प बिंदु –

9

जेकोलाडो द्वारा दिए गए उत्तर ठीक है अगर आपके पास एक्सेल शीट में सभी प्रविष्टियां हैं जो पूर्णांक हैं।

if i==int(i): //checking for the integer: 
     print int(i)  // solving your problem and printing the integer 
    else: 
     print i   //printing the float if present 

आप इस उपयोगी :)

+1

धन्यवाद मिनोचा। –

+0

एनपी @TerryLiYifeng :) – minocha

16

एक्सेल व्यवहार करता है तैरता के रूप में सभी नंबरों को खोजने - लेकिन अगर आप एक संख्या है जो एक नाव आप हमेशा की तरह एक चेक हालत डाल सकते हैं लगता है। सामान्यतः, यह परवाह नहीं करता कि your_number % 1 == 0.0 सत्य है या नहीं।

उदाहरण: A1 = 63.0, B1 = 63, C1 = INT(A1), A2 = TYPE(A1), B2 = TYPE(B1), C2 = TYPE(C1) आप देखेंगे कि TYPE() प्रत्येक मामले में 1 लौटाता है।

से एक्सेल सहायता:

If value is TYPE returns 
Number  1 
Text   2 
Logical value 4 
Error value 16 
Array   64 

xlrd रिपोर्ट यह क्या पाता है। xlrd इसे आपके सामने पेश करने से पहले इसके इनपुट को उलझन में नहीं डालता है। (62.9, 63.0, 63.1, etc) से (62.9, 63, 63.1, etc) से कॉलम को कनवर्ट करना मेरे लिए CPU समय के व्यर्थ अपशिष्ट की तरह प्रतीत होता है।

+6

+1। इसे सीधे 'xlrd' के लेखक से सुनने से बेहतर नहीं मिलता है। –

0

मैंने कोड लिखा है जो संख्याओं को तारों में कनवर्ट करने की कोशिश करता है क्योंकि वे Excel द्वारा प्रदर्शित होते हैं। दृष्टिकोण काम करता है कम से कम पूर्णांक संख्याओं और संख्याओं के लिए अल्पविराम के बाद दो अंकों के साथ काम करता है। यह कई अन्य प्रारूपों के लिए भी काम करना चाहिए।

विचार, स्क्रीनशॉट और कोड यहां हैं: http://uucode.com/blog/2013/10/22/using-xlrd-and-formatting-excel-numbers/

-1

एक्सेल शीट में सहेजा संख्या के उपसर्ग के रूप में Apostrophe जोड़ें। ऐसा करने से पूर्णांक को पूर्णांक के रूप में आयात किया जा सकता है लेकिन फ्लोटिंग पॉइंट नंबर के रूप में नहीं।

यह किसी भी मुद्दे के बिना मेरे लिए काम कर रहा था।

+0

हालांकि यह एक पुराना उत्तर है, यह पूछे गए प्रश्न का समाधान नहीं करता है। प्रश्न xlrd से संबंधित है, और जिस तरह से यह संख्याओं को पार करता है। – Joundill