2013-05-24 10 views
54

में स्ट्रिंग्स को फ़्लैट करने के लिए तारों को कनवर्ट करना स्ट्रिंग्स युक्त 0Fमानों को डेटाफ्रेम कॉलम को कैसे घुमाएं। और एक और स्तंभ है जिसका मूल्य तार और तैरता है; इस पूरे कॉलम को फ्लोट में कैसे परिवर्तित करें।डेटाफ्रेम

+2

** 'convert_objects' ** का उपयोग न करें। यह बहिष्कृत है। 'To_numeric' या' astype' का प्रयोग करें बजाय –

उत्तर

28

आप df.column_name = df.column_name.astype(float) को आजमा सकते हैं। NaN मानों के लिए, आपको यह निर्दिष्ट करने की आवश्यकता है कि उन्हें कैसे परिवर्तित किया जाना चाहिए, लेकिन आप इसे करने के लिए .fillna विधि का उपयोग कर सकते हैं।

उदाहरण:

In [12]: df 
Out[12]: 
    a b 
0 0.1 0.2 
1 NaN 0.3 
2 0.4 0.5 

In [13]: df.a.values 
Out[13]: array(['0.1', nan, '0.4'], dtype=object) 

In [14]: df.a = df.a.astype(float).fillna(0.0) 

In [15]: df 
Out[15]: 
    a b 
0 0.1 0.2 
1 0.0 0.3 
2 0.4 0.5 

In [16]: df.a.values 
Out[16]: array([ 0.1, 0. , 0.4]) 
47

यह 0.11 में उपलब्ध है। बल रूपांतरण (या सेट से नैन) यह तब भी काम करेगा जब astype विफल हो जाएगा; इसकी भी श्रृंखला द्वारा श्रृंखला तो यह एक पूरी स्ट्रिंग स्तंभ कहना

In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo']))) 

In [11]: df 
Out[11]: 
    A B 
0 1.0 1.0 
1 1 foo 

In [12]: df.dtypes 
Out[12]: 
A object 
B object 
dtype: object 

In [13]: df.convert_objects(convert_numeric=True) 
Out[13]: 
    A B 
0 1 1 
1 1 NaN 

In [14]: df.convert_objects(convert_numeric=True).dtypes 
Out[14]: 
A float64 
B float64 
dtype: object 
+0

कृपया ध्यान दें कि यह (leadt multiindex पर) स्तंभों के लिए काम नहीं करता है, बस dataframe – denfromufa

+1

में मूल्यों के लिए काम करता है मैं set_levels उपयोग करने के लिए स्ट्रिंग में कनवर्ट करने – denfromufa

+0

फ्लोट करने के लिए तो आप कुछ गलत कर रहे हैं के लिए किया था । स्ट्रिंग को फ्लोट में कनवर्ट करना एक व्याख्यात्मक उपयोगकर्ता कार्रवाई है। – Jeff

15
df['MyColumnName'] = df['MyColumnName'].astype('float64') 
+2

यह स्ट्रिंग से फ़्लोट में कनवर्ट करते समय काम नहीं करता है: 'ValueError: स्ट्रिंग को फ़्लोट में परिवर्तित नहीं कर सका: 'तिथि ' '' – Jack

27

पांडा के एक नए संस्करण में (0.17 और ऊपर) रूपांतरित नहीं करेंगे, तो आप to_numeric फ़ंक्शन का उपयोग कर सकते हैं। यह आपको पूरे डेटाफ्रेम या केवल व्यक्तिगत कॉलम को कनवर्ट करने की अनुमति देता है। यह आपको उन सामानों का इलाज करने का विकल्प भी प्रदान करता है जिन्हें संख्यात्मक मानों में परिवर्तित नहीं किया जा सकता है:

import pandas as pd 
s = pd.Series(['1.0', '2', -3]) 
pd.to_numeric(s) 
s = pd.Series(['apple', '1.0', '2', -3]) 
pd.to_numeric(s, errors='ignore') 
pd.to_numeric(s, errors='coerce') 
+15

pd.to_numeric' एक 'DataFrame' को लागू करने के लिए एक' उपयोग कर सकते हैं df.apply (pd.to_numeric) 'के रूप में [विस्तार से इस जवाब में बताया गया है] (https://stackoverflow.com/a/34844867/604,687)। – Ninjakannon