I have a CSV containing numbers which I am trying to convert to floats.
filename = "filename.csv"
enclosed_folder = "path/to/Folder"
full_path = os.path.join(enclosed_folder,filename)
with open(full_path) as input_data:
temp = input_data.readlines()
n = len(temp) #int(temp.pop(0))
matrix = [x.split(" ") for x in temp]
for i in range(n):
for j in range(n):
matrix[i][j] = float(matrix[i][j])
input_data.close()
When I open the file in any text editor, it does not show the \n at the end of each row.
But running the python code shows the `ValueError: could not convert string to float' because of '\n' being present at the end of each row.
Traceback (most recent call last):
File "hierarchical-clustering.py", line 37, in <module>
matrix[i][j] = float(matrix[i][j])
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429\n'
So, how do I fix this error?
EDIT: I used strip() as well as rstrip() as suggested in some of the answers to remove whitespaces, but still the error does not go away:
Traceback (most recent call last):
File "hierarchical-clustering.py", line 37, in <module>
matrix[i][j] = float(matrix[i][j].rstrip())
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429'

floatcares about newlines. I just triedfloat("1.0\n")on my machine and it happily gives me1.0. I think the problem is your commas.float("1,2")does not work, for instance.csvmodule to read your csv file? If you use that instead of trying to parse the file manually, IIRC it will perform rudimentary type conversion on your behalf. Then you don't need to callfloatat all.csvwill not assume any types. It deliberately considers everything a string. (This is both more Pythonic (explicit is better than implicit) and avoids one of the things that programmers hate most about Excel.)