2015-07-29 11 views
9

के भीतर कॉमा को डॉट्स में कनवर्ट करें I नीचे एक जैसा दिखने वाला एक सीएसवी फ़ाइल आयात कर रहा हूं। Pandas.read_csvडेटाफ्रेम

df = pd.read_csv(Input, delimiter=";") 

का उपयोग करना। । ।

10; 2015/02/01 16: 58; 2015/02/01 16: 58; -0.59; 0.1; -4.39; NotApplicable; 0.79; 0,2

11; 2015/02/01 16: 58; 2015/02/01 16 : 58; -0.57; 0.2; -2.87; लागू नहीं; 0.7 9; 0.21

। । ।

समस्या यह है कि जब मैं बाद में अपने कोड में इन मानों का उपयोग करने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है: TypeError: गैर-int प्रकार 'float' द्वारा अनुक्रम को गुणा नहीं कर सकता।

मुझे यह त्रुटि मिलती है क्योंकि जिस नंबर का उपयोग करने का प्रयास मैं एक दशमलव विभाजक के रूप में एक बिंदु (।) के साथ नहीं लिखा जाता है लेकिन एक अल्पविराम (,)। कॉम को मैन्युअल रूप से एक बिंदु पर बदलने के बाद मेरा प्रोग्राम काम करता है।

मैं अपने इनपुट के प्रारूप को नहीं बदल सकता, और इस प्रकार मेरे कोड को काम करने के लिए मेरे डेटाफ्रेम में कॉमा को प्रतिस्थापित करना है, और मैं इसे मैन्युअल रूप से करने की आवश्यकता के बिना पाइथन करना चाहता हूं। क्या तुम्हारे पास कोई सुझाव है? doc

यानी:

+1

तुम कोशिश 'DF = pd.read_csv किया (" data.csv ", दशमलव =", ", सीमांकक =", ")' –

+0

नहीं है कि, काफी अजगर करने के लिए नया प्रयास नहीं किया है। मैं इसे कोशिश करने की कोशिश करता हूं :) – Nautilius

+0

क्षमा करें मुझे नहीं लगता कि आपके सीएसवी को दशमलव बिंदुओं का उपयोग करके स्वरूपित किया गया है, इसलिए इसे फ्लोट के रूप में आना चाहिए, क्या आप अपना कोड दिखा सकते हैं जो फ्लोट डाइट पसंद नहीं करता है, आप बदल सकते हैं कॉलम – EdChum

उत्तर

20

pandas.read_csv इस के लिए एक decimal पैरामीटर है के साथ प्रयास करें:

df = pd.read_csv(Input, delimiter=";", decimal=",") 
+0

Ty, चाल है। – Nautilius

2

मुझे लगता है कि पांडा read_csv में decimal="," सहित जैसा कि पहले उल्लेख जवाब पसंदीदा विकल्प है।

हालांकि, मुझे लगता है कि यह पाइथन पार्सिंग इंजन के साथ असंगत है। जैसे skiprow= का उपयोग करते समय, read_csv इस इंजन पर वापस आ जाएगा और इस प्रकार आप उसी read_csv कथन में skiprow= और decimal= का उपयोग नहीं कर सकते हैं। इसके अलावा, मैं नहीं वास्तव में काम करने के लिए decimal= बयान प्राप्त करने में सक्षम (मुझे के कारण शायद हालांकि) कर दिया गया है

लंबा रास्ता दौर मैं एक ही परिणाम प्राप्त करने के लिए इस्तेमाल किया सूची comprehensions, .replace और .astype के साथ है। इस विधि के लिए प्रमुख नकारात्मक पक्ष यह है कि यह एक समय में एक स्तंभ किया जाना चाहिए है:

df = pd.DataFrame({'a': ['120,00', '42,00', '18,00', '23,00'], 
       'b': ['51,23', '18,45', '28,90', '133,00']}) 

df['a'] = [x.replace(',', '.') for x in df['a']] 

df['a'] = df['a'].astype(float) 

अब, स्तंभ एक नाव प्रकार की कोशिकाओं होगा। कॉलम बी में अभी भी स्ट्रिंग्स हैं।

ध्यान दें कि .replace यहां इस्तेमाल नहीं किया गया है बल्कि पाइथन का अंतर्निहित संस्करण है। पांडस के संस्करण को स्ट्रिंग को सटीक मिलान या रेगेक्स होना आवश्यक है।

1

मैं पाइथन पांडस के साथ दशमलव comma दशमलव dot पर बदलने के तरीके के बारे में प्रश्न का उत्तर देता हूं।

$ cat test.py 
import pandas as pd 
df = pd.read_csv("test.csv", quotechar='"', decimal=",") 
df.to_csv("test2.csv", sep=',', encoding='utf-8', quotechar='"', decimal='.') 

जबकि उत्पादन विभाजक बिंदु के रूप में निर्दिष्ट किया जाता है, जहां हम अल्पविराम के रूप में दशमलव विभाजक में पढ़ने निर्दिष्ट करें।तो

$ cat test.csv 
header,header2 
1,"2,1" 
3,"4,0" 
$ cat test2.csv 
,header,header2 
0,1,2.1 
1,3,4.0 

जहां आप देखते हैं कि विभाजक डॉट में बदल गया है।