Mam plik CSV, w którym wyglądają surowe dane i dane w Dataframe:

2013-01-15 07:55:51.537174600+00:00,"37,310112",54
2013-01-15 07:55:52.707176700+00:00,"37,299696",54
2013-01-15 07:55:58.167186300+00:00,"37,310112",54

datetime                               value  IDName 
    2013-01-31 05:00:21.573676100   37,34136      54
    2013-01-31 05:00:22.150877100  37,351776      54
    2013-01-31 05:00:52.945331200   37,34136      54

Chcę je czytać, wykonaj dataframe i wykonaj pewne obliczenia na wartościach. Próbowałem już:

df = pd.read_csv(filepath, parse_dates=True, index_col='datetime', low_memory=False, delimiter=',', quotechar='"')

df['value'].astype(float)

Kiedy chciałem zastąpić "," z ".", Użyłem Kodeksu:

df['value'] = df['value'].apply(lambda x: x.split()[0].replace(',', '.'))

Jednak dało mi ten błąd:

AttributeError: 'float' object has no attribute 'split'

Ale daje:

ValueError: could not convert string to float: '37,310112'

Jestem trochę zdezorientowany. Czy ktoś wie, jak konwertować wartości w kolumnie "Wartość" na floar?

2
aineczka 4 czerwiec 2018, 12:28

3 odpowiedzi

Najlepsza odpowiedź

Użyj parametru decimal:

df = pd.read_csv(filepath, 
                 parse_dates=True, 
                 index_col='datetime', 
                 low_memory=False,
                 decimal=',', 
                 quotechar='"')
3
jezrael 4 czerwiec 2018, 09:34

DF ["Wartość"]. Zastosuj (Lambda X: Float (X))

-1
classicdude7 4 czerwiec 2018, 09:36

Spróbuj tego:

    df['value'] = df['value'].apply(lambda x: float(str(x).replace(',', '.')))
0
Dataichou 4 czerwiec 2018, 09:30