This is my DataFrame:
d = {\'col1\': [\'sku 1.1\', \'sku 1.2\', \'sku 1.3\'], \'col2\': [\'9.876.543,21\', 654, \'321,01\']}
df = pd.DataFrame(data=d)
df
You can try
df = df.apply(lambda x: x.replace(',', '&'))
df = df.apply(lambda x: x.replace('.', ','))
df = df.apply(lambda x: x.replace('&', '.'))
You are always better off using standard system facilities where they exist. Knowing that some locales use commas and decimal points differently I could not believe that Pandas would not use the formats of the locale.
Sure enough a quick search revealed this gist, which explains how to make use of locales to convert strings to numbers. In essence you need to import locale
and after you've built the dataframe call locale.setlocale
to establish a locale that uses commas as decimal points and periods for separators, then apply the dataframe's applymapp
method.
The best is use if possible parameters in read_csv:
df = pd.read_csv(file, thousands='.', decimal=',')
If not possible, then replace
should help:
df['col2'] = (df['col2'].replace('\.','', regex=True)
.replace(',','.', regex=True)
.astype(float))