एक DataFrame में फ़्लोटिंग के लिए स्ट्रिंग्स परिवर्तित करना


113

कैसे एक DataFrame स्तंभ को घुमाने के लिए स्ट्रिंग्स और NaNमानों को तैरता है। और एक अन्य स्तंभ है जिसके मूल्य तार और तैरते हैं; इस पूरे कॉलम को फ्लोट में कैसे बदलें।


7
उपयोग न करें convert_objects। यह पदावनत है। उपयोग to_numericया astypeइसके बजाय
टेड पेट्रोव

जवाबों:


72

नोट: pd.convert_objects अब हटा दिया गया है। आप का उपयोग करना चाहिए pd.Series.astype(float)या pd.to_numericअन्य उत्तर में वर्णित है।

यह 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

कृपया ध्यान दें कि यह कॉलम (लीड मल्टीटैक्स पर) के लिए काम नहीं करता है, डेटाफ्रेम में मानों के लिए काम करता है
डेन्फ्रोमुफा

1
मुझे स्ट्रिंग को बदलने के लिए set_levels का उपयोग करना पड़ा
denfromufa

16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)आप सिर्फ एक कॉलम को बदल सकते हैं।
जैक

19
यह अब नए संस्करणों में pd.to_numeric (col) है
जेफ

11
Convert_objects को नए पांडा में चित्रित किया गया है। डेटा-प्रकार विशिष्ट कन्वर्टर्स pd.to_numeric का उपयोग करें।
थॉमस मैथ्यू

58

आप कोशिश कर सकते हैं 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.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')

32
लागू करने के लिए pd.to_numericएक के लिए DataFrame, एक का उपयोग कर सकते हैं df.apply(pd.to_numeric)के रूप में इस जवाब में विस्तार से समझाया
निंजाकन्नन

31
df['MyColumnName'] = df['MyColumnName'].astype('float64') 

6
एक स्ट्रिंग से एक फ्लोट में परिवर्तित करने पर यह काम नहीं करता है:ValueError: could not convert string to float: 'date'
जैक

@ क्या आप यहाँ वर्कअराउंड जानते हैं? मैं इस सटीक मुद्दे में चल रहा हूँ स्ट्रिंग को फ्लोट में परिवर्तित करना।
हट

@ मैं उसी मुद्दे का सामना कर रहा हूं। क्या आपको इसका हल मिला?
प्रखर झुड़ले

@ जेक मुझे यकीन नहीं है, लेकिन आप डेट फॉर्मेट और फ्लोट को मिलाते हैं। # Datetime df [ 'तारीख'] = pd.to_datetime (df [ 'तारीख']) करने के लिए परिवर्तित
क्लाउड Coulombe

8

आपको खाली स्ट्रिंग्स ('') को np.nan से बदलना होगा ताकि फ्लोट में कनवर्ट किया जा सके। अर्थात:

df['a']=df.a.replace('',np.nan).astype(float)

1

यहाँ एक उदाहरण है

                            GHI             Temp  Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:01:00 -7.99999952505459e-7    18.2    0   NaN
2016-03-15 06:02:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:03:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:04:00 -7.99999952505459e-7    18.3    0   NaN

लेकिन अगर यह सब स्ट्रिंग मान है ... जैसा कि मेरे मामले में था ... वांछित कॉलम को फ्लोट में बदलें:

df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)

आपके डेटाफ्रेम में अब फ्लोट मान होगा :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.