简体   繁体   中英

Pandas convert data type from object to float

I read some weather data from a .csv file as a dataframe named "weather". The problem is that the data type of one of the columns is object . This is weird, as it indicates temperature. How do I change it to having a float data type? I tried to_numeric , but it can't parse it.

weather.info()
weather.head()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 304 entries, 2017-01-01 to 2017-10-31
Data columns (total 2 columns):
Temp    304 non-null object
Rain    304 non-null float64
dtypes: float64(1), object(1)
memory usage: 17.1+ KB

           Temp     Rain
Date        
2017-01-01  12.4    0.0
2017-02-01  11      0.6
2017-03-01  10.4    0.6
2017-04-01  10.9    0.2
2017-05-01  13.2    0.0
  • You can use pandas.Series.astype
  • You can do something like this :

     weather["Temp"] = weather.Temp.astype(float)
  • You can also use pd.to_numeric that will convert the column from object to float

  • For details on how to use it checkout this link : http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html
  • Example :

     s = pd.Series(['apple', '1.0', '2', -3]) print(pd.to_numeric(s, errors='ignore')) print("=========================") print(pd.to_numeric(s, errors='coerce'))
  • Output:

     0 apple 1 1.0 2 2 3 -3 ========================= dtype: object 0 NaN 1 1.0 2 2.0 3 -3.0 dtype: float64
  • In your case you can do something like this:

     weather["Temp"] = pd.to_numeric(weather.Temp, errors='coerce')
  • Other option is to use convert_objects
  • Example is as follows

    >> pd.Series([1,2,3,4,'.']).convert_objects(convert_numeric=True) 0 1 1 2 2 3 3 4 4 NaN dtype: float64
  • You can use this as follows:

     weather["Temp"] = weather.Temp.convert_objects(convert_numeric=True)
  • I have showed you examples because if any of your column won't have a number then it will be converted to NaN ... so be careful while using it.

I tried all methods suggested here but sadly none worked. Instead, found this to be working:

df['column'] = pd.to_numeric(df['column'],errors = 'coerce')

And then check it using:

print(df.info())

I eventually used:

weather["Temp"] = weather["Temp"].convert_objects(convert_numeric=True)

It worked just fine, except that I got the following message.

C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: FutureWarning:
convert_objects is deprecated.  Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.

您可以尝试以下操作:

df['column'] = df['column'].map(lambda x: float(x))

First check your data cuz you may get an error if you have ',' instead of '.' if so, you need to transform every ',' into '.' with a function :

def replacee(s):
i=str(s).find(',')
if(i>0):
    return s[:i] + '.' + s[i+1:]
else :
    return s 

then you need to apply this function on every row in your column :

dfOPA['Montant']=dfOPA['Montant'].apply(replacee)

then the convert function will work fine :

dfOPA['Montant'] = pd.to_numeric(dfOPA['Montant'],errors = 'coerce')

Eg, For Converting $40,000.00 object to 40000 int or float 32

Follow this step by step:

$40,000.00 ---(**1**. remove $)--->  40,000.00  ---(**2**. remove , comma)--->  40000.00 ---(**3**. remove . dot)--->  4000000  ---(**4**. remove empty space)---> 4000000  ---(**5**. Remove NA Values)--->  4000000 ---(**6**. now this is object type so, convert to int using .astype(int) )---> 4000000  ---(**7**. divide by 100)---> 40000  

Implementing code In Pandas

table1["Price"] = table1["Price"].str.replace('$','')<br>
table1["Price"] = table1["Price"].str.replace(',','')<br>
table1["Price"] = table1["Price"].str.replace('.','')<br>
table1["Price"] = table1["Price"].str.replace(' ','')     
table1 = table1.dropna()<br>
table1["Price"] = table1["Price"].astype(int)<br>
table1["Price"] = table1["Price"] / 100<br> 

Finally it's done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM