3

Im sorry folks, I know this question have been answered before,I tried all answers also research and tried different things for 4 hours. I could not get done.

I believe my data has something weird..

so following my data and my attempts:

x = pd.DataFrame({ "Cost" : [ "83.53462540716612" , "0.0" , "66.6315396408911" , "340.9281334351922" , "181.8128056341571" , "0.00" ]

My attempts:

###Attempt 0
# x["Cost"] = x["Cost"].str.replace(' ', '')
# x["Cost"] = x["Cost"].str.replace(',', '').astype(float)


###Attempt 1
#x = x.where((pd.notnull(x)), None)
#x["Cost"]  = float(len(x["Cost"]))


###Attempt 2
#x["Cost"].isdecimal()
#x = [float(x) for x in range(len(x["Cost"])) ]


###Attempt 3
#[float(x) for x in x["Cost"].strip().split()]


###Attempt 4
#x["Cost2"] = x["Cost"].append([float(str(x)) for x in x["Cost"].split(' ') if len(x)>1])


###Attempt 5
#x["Cost"]  = pd.get_dummies(x["Cost"]).values


Nothing works.. getting errors such:

ValueError: could not convert string to float: 'Null'

# else, only a single dtype is given
# _astype_nansafe works fine with 1-d only
# TODO(extension)
# Explicit copy, or required since NumPy can't view from / to object.

3
  • 2
    You didn't try pd.to_numeric? pd.to_numeric(x.Cost) Commented Feb 3, 2020 at 17:39
  • 1
    maybe in your data you have Null values, you should handle them before converting? Commented Feb 3, 2020 at 17:41
  • @yatu No, I will try it now!! thank you. @Marcos so I try removing the Null values at ##Attempt 1 x.where((pd.notnull(x)), None) Commented Feb 3, 2020 at 17:48

1 Answer 1

6

You can use pd.to_numeric, and coerce errors so that they result in NaN values if they cannot be converted.

x = pd.DataFrame({ "Cost" : [ "Null", "1,083.53462540716612" , "0.0" , "66.6315396408911" , "340.9281334351922" , "181.8128056341571" , "0.00" ]})

x['Cost'] = pd.to_numeric(x['Cost'].str.replace(",", ""), errors='coerce')
>>> x

          Cost
0          NaN
1  1083.534625
2     0.000000
3    66.631540
4   340.928133
5   181.812806
6     0.000000
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks Alexander, it worked!! just edit it x['Cost'] = pd.to_numeric(x['Cost'].str.replace(",", ""), errors='coerce')
Well just like peter, I spent so much time trying to achieve this. I really appreciated your answer !!!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.