2015-09-15 4 views
21

मैं pandas.read_excel() फ़ंक्शन के साथ एक पांडा डेटाफ़्रेम में एक्सेल फ़ाइल आयात कर रहा हूं।पायथन पांडा: एक्सेल फ़ाइल पढ़ने के दौरान डेटा प्रकार कैसे निर्दिष्ट करें?

कॉलम में से एक तालिका तालिका की प्राथमिक कुंजी है: यह सभी संख्या है, लेकिन यह टेक्स्ट के रूप में संग्रहीत है (एक्सेल कोशिकाओं के ऊपरी बाईं ओर थोड़ा हरा त्रिभुज इसकी पुष्टि करता है)।

हालांकि, जब मैं फ़ाइल को पांडा डेटाफ्रेम में आयात करता हूं, तो कॉलम को फ्लोट के रूप में आयात किया जाता है। इसका मतलब है कि, उदाहरण के लिए, '0614' 614 बन जाता है।

क्या कॉलम आयात करते समय डेटाटाइप निर्दिष्ट करने का कोई तरीका है? मैं समझता हूं कि सीएसवी फाइलों को आयात करते समय यह संभव है लेकिन read_excel() के सिंटैक्स में कुछ भी नहीं मिला।

एकमात्र समाधान जिसे मैं सोच सकता हूं, टेक्स्ट में शुरुआत ('0614' को 'ए0614' में परिवर्तित करना) में यह सुनिश्चित करने के लिए है कि कॉलम को टेक्स्ट के रूप में आयात किया गया है, और फिर बंद करना पायथन में 'ए', इसलिए मैं इसे अन्य सारणी से मिलान कर सकता हूं जो मैं SQL से आयात कर रहा हूं।

उत्तर

39

आप बस कन्वर्टर्स निर्दिष्ट करते हैं। मैंने निम्नलिखित संरचना की एक्सेल स्प्रैडशीट बनाई:

names ages 
bob  05 
tom  4 
suzy 3 

जहां "आयु" कॉलम स्ट्रिंग के रूप में स्वरूपित है। लोड करने के लिए:

import pandas as pd 

df = pd.read_excel('Book1.xlsx',sheetname='Sheet1',header=0,converters={'names':str,'ages':str}) 
>>> df 
     names ages 
    0 bob 05 
    1 tom 4 
    2 suzy 3 
+0

मुझे 'कन्वर्टर्स' को कॉलम पर लागू करने के लिए एक फ़ंक्शन निर्दिष्ट किया गया था। जाहिर है, मैं गलत था - इसे इंगित करने के लिए धन्यवाद, यह बहुत उपयोगी है! –

+1

मुझे स्वीकार्य कनवर्टर कार्यों की सूची कहां मिल सकती है? मुझे यहां 'str' दिखाई देता है, लेकिन संभवतः वहां' int' और कुछ और इसके अलावा - स्रोत दस्तावेज़ों के लिए कहीं भी एक लिंक है जो उपलब्ध कनवर्टर कार्यों को उपलब्ध कराता है? –

+1

मुझे कोई सूची नहीं मिली है। चूंकि "कन्वर्टर्स" कार्यों को स्वीकार करता है, मुझे संदेह है कि आपकी कल्पना सीमा है, बस आप "कन्वर्टर्स" कार्यक्षमता की सीमाओं के भीतर रहते हैं (यानी यह उन कार्यों का उपयोग करने के लिए डिज़ाइन किया गया था जिनके लिए केवल एक इनपुट चर की आवश्यकता है!)। – tnknepp

8

read_excel() फ़ंक्शन में कनवर्टर्स तर्क है, जहां आप कुछ कॉलम में इनपुट करने के लिए फ़ंक्शंस लागू कर सकते हैं। आप उन्हें तारों के रूप में रखने के लिए इसका उपयोग कर सकते हैं। Documentation:

कुछ स्तंभों में मूल्यों को परिवर्तित करने के लिए कार्यों का डिक्ट। कुंजी या तो पूर्णांक या कॉलम लेबल हो सकती हैं, मान ऐसे फ़ंक्शन होते हैं जो एक इनपुट तर्क लेते हैं, एक्सेल सेल सामग्री, और परिवर्तित सामग्री को वापस कर देते हैं।

उदाहरण कोड:

pandas.read_excel(my_file, converters = {my_str_column: str}) 
+0

यदि हमें शीट में मौजूद कॉलम की संख्या से अवगत नहीं है, तो क्या पढ़ने के दौरान हर कॉलम पर इसे लागू करने का कोई तरीका है? – Tango

+6

समाधान मिला: 'कन्वर्टर्स = {कॉल: कॉलम_लिस्ट में कॉल के लिए str} df = pd.read_excel ('some_excelfile.xls', कन्वर्टर्स = कन्वर्टर्स)' – Tango

6

v0.20.0 के साथ शुरू, read_excel() समारोह में dtype कीवर्ड तर्क डेटा प्रकार स्तंभ में लागू करने के जैसे यह read_csv() मामले के लिए मौजूद है की जरूरत है कि निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता ।

converters और dtype का उपयोग उसी कॉलम नाम पर एक साथ तर्क से बाद में छाया हो रहा है और पूर्व प्राथमिकता प्राप्त हो रही है।


1) के लिए inorder यह dtypes व्याख्या नहीं करने के लिए बल्कि सभी सामग्री को पारित की यह कॉलम है के रूप में वे पहले फ़ाइल में मूल रूप से थे, हम तो str या object को यह आर्ग सेट कर सकते हैं कि हम नहीं हमारे डेटा गड़बड़ करो।

pd.read_excel('file_name.xlsx', dtype=str)   # (or) dtype=object 

2) जिसमें keys स्तंभ नाम का गठन और values यह भी एक dict मानचित्रण का समर्थन करता है यह विशेष रूप से जब आप स्थापित किया जाना संबंधित डेटा प्रकार है (ऐसा ही एक मामला संख्या में शून्य है जो अन्यथा खो जाएगा प्रमुख जाएगा) सभी कॉलम के सबसेट के लिए dtype को बदलना चाहते हैं।

# Assuming data types for `a` and `b` columns to be altered 
pd.read_excel('file_name.xlsx', dtype={'a': np.float64, 'b': np.int32}) 
+0

'read_excel' विधि' dtype' पैरामीटर को स्वीकार नहीं करता है। –

1

मामले में अगर आप dataframe में संख्या और स्तंभों के नाम की जानकारी नहीं है तो इस विधि से उपयोगी हो सकते हैं:

column_list = [] 
df_column = pd.read_excel(file_name, 'Sheet1').columns 
for i in df_column: 
    column_list.append(i) 
converter = {col: str for col in column_list} 
df_actual = pd.read_excel(file_name, converters=converter) 

जहां column_list अपने स्तंभ नाम की सूची है।

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