Zmiana formatu danych

0

Cześć,

mam problem ze zmianą formatu wczytanych danych. Po wczytaniu tabela z danymi wygląda następująco:

dane = pd.read_excel('2018_PM25_24g.xlsx', skiprows = 5)
dane.head()

screenshot-20191122145743.png

Widoczne wartości traktowane są jako object, jednak przy próbie analizy podstawowych statystyk widać, że poza zmienną zawierającą daty pozostałe są widoczne jako NAN

screenshot-20191122150028.png

Wyodrębniłem dane dotyczące odczytów z dwóch stacji pomiarowych i spróbowałem je przekonwertować do typu zmiennoprzecinkowego

waw = dane[['Czas pomiaru', 'MzWarKondrat-PM2.5-24g', 'MzWarWokalna-PM2.5-24g']]
waw['MzWarKondrat-PM2.5-24g'].astype(float)

ale w rezultacie otrzymuję błąd:

ValueError: could not convert string to float: '28,13'

W pliku źródłowych z którego są importowane dane widać, że Excel także nie czyta danych jako wartości liczbowe. Czy możliwe jest, że w komórkach są jakieś niewidoczne znaki, które powodują problemy z prawidłowych odczytem?

Załączam plik źródłowy.

0
lion137 napisał(a):

Spróbuj pandas.to_numeric:
https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.to_numeric.html

Próbowałem, ale otrzymuję błąd:

ValueError: Unable to parse string "23,917874" at position 0

0

Być może masz taki błąd, bo zamiast kropką wartość dziesiętna jest oddzielana przecinkiem

>>> float('28,13')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 28,13
>>> float('28.13')
28.13

Z tego co widzę, o ile pandas.read_csv ma opcję decimal, to pandas.read_csv nie. Musisz pewnie ręcznie przeiterować swoje napisy robiąc replace(',', '.') przed konwersją. Być może również w Excelu dane nie są odpowiednio oznakowane (trzymane jako napisy, a nie liczby - sprawdź formatowanie komórek).

0
Spearhead napisał(a):

Być może masz taki błąd, bo zamiast kropką wartość dziesiętna jest oddzielana przecinkiem

>>> float('28,13')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 28,13
>>> float('28.13')
28.13

Z tego co widzę, o ile pandas.read_csv ma opcję decimal, to pandas.read_csv nie. Musisz pewnie ręcznie przeiterować swoje napisy robiąc replace(',', '.') przed konwersją. Być może również w Excelu dane nie są odpowiednio oznakowane (trzymane jako napisy, a nie liczby - sprawdź formatowanie komórek).

Masz rację, problemem były przecinki zamiast kropek. Dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1