Nauč se Python > Kurzy > Datový kurz PyLadies > Explorační datová analýza a statistika jedné proměnné > Feedback k minulé lekci a dotazům

Feedback k minulé lekci a dotazům

Oprava sloupců, nulové hodnoty, oddělovač desetinných míst …

V rámci minulé lekce jsem si ukázali možnost opravy dat v jednom sloupci, který byl zřejmě chybný. Pokud ovšem data přicházejí v nějakém formátu, kterému pandas nerozumí, a formát je konzistentní v celém souboru, je možné opravu zajistit už při načtení souboru. Funkce read_csv má k tomu mnoho možností nastavení.

In [1]:
import pandas as pd
In [2]:
pd.read_csv("static/vaha-vyska.csv")
Out[2]:
Muž;187 6;109 72
0 Muž;"-";73 62 NaN
1 Muž;188 2;"-" NaN
2 Muž;182 2;99 81.0
3 Muž;"-";93 6 NaN
4 Muž;170 8;69 4.0
5 Muž;174 7;83 43.0
6 Muž;173 6;76 19.0
7 Muž;170 2;79 8.0
8 Muž;161 2;"-" NaN
9 Žena;154 8;43 4.0
10 Žena;160 5;64 8.0
11 Žena;159 1;46 65.0
12 Žena;157 7;62 91.0
13 Žena;152 5;44 31.0
14 Žena;150 1;50 14.0
15 Žena;168 1;62 4.0
16 Žena;170 4;77 5.0
17 Žena;162 2;58 28.0
18 Žena;175 3;74 32.0
In [3]:
pd.read_csv("static/vaha-vyska.csv",
            sep=";",
            decimal=",",
            na_values="-",
            names=["pohlavi", "vyska", "vaha"]
)
Out[3]:
pohlavi vyska vaha
0 Muž 187.6 109.72
1 Muž NaN 73.62
2 Muž 188.2 NaN
3 Muž 182.2 99.81
4 Muž NaN 93.60
5 Muž 170.8 69.04
6 Muž 174.7 83.43
7 Muž 173.6 76.19
8 Muž 170.2 79.80
9 Muž 161.2 NaN
10 Žena 154.8 43.40
11 Žena 160.5 64.08
12 Žena 159.1 46.65
13 Žena 157.7 62.91
14 Žena 152.5 44.31
15 Žena 150.1 50.14
16 Žena 168.1 62.04
17 Žena 170.4 77.50
18 Žena 162.2 58.28
19 Žena 175.3 74.32

Chybové hlášky

In [4]:
pd.read_csv("static/vaha-vyska.cs")
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-4-44e48f4b268f> in <module>
----> 1 pd.read_csv("static/vaha-vyska.cs")

~/.virtualenvs/naucse/lib/python3.7/site-packages/pandas/io/parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
    683         )
    684 
--> 685         return _read(filepath_or_buffer, kwds)
    686 
    687     parser_f.__name__ = name

~/.virtualenvs/naucse/lib/python3.7/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds)
    455 
    456     # Create the parser.
--> 457     parser = TextFileReader(fp_or_buf, **kwds)
    458 
    459     if chunksize or iterator:

~/.virtualenvs/naucse/lib/python3.7/site-packages/pandas/io/parsers.py in __init__(self, f, engine, **kwds)
    893             self.options["has_index_names"] = kwds["has_index_names"]
    894 
--> 895         self._make_engine(self.engine)
    896 
    897     def close(self):

~/.virtualenvs/naucse/lib/python3.7/site-packages/pandas/io/parsers.py in _make_engine(self, engine)
   1133     def _make_engine(self, engine="c"):
   1134         if engine == "c":
-> 1135             self._engine = CParserWrapper(self.f, **self.options)
   1136         else:
   1137             if engine == "python":

~/.virtualenvs/naucse/lib/python3.7/site-packages/pandas/io/parsers.py in __init__(self, src, **kwds)
   1915         kwds["usecols"] = self.usecols
   1916 
-> 1917         self._reader = parsers.TextReader(src, **kwds)
   1918         self.unnamed_cols = self._reader.unnamed_cols
   1919 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()

FileNotFoundError: [Errno 2] File b'static/vaha-vyska.cs' does not exist: b'static/vaha-vyska.cs'

Práce s cestami a aktuální složka

Aktuální pracovní adresář

Je možné zjistit v příkazové řádce příkazem pwd nebo pomocí modulu os v Pythonu.

In [5]:
!pwd
/home/lbalhar/Dropbox/Projekty/naucse.python.cz/lessons/feedback/ostrava2
In [6]:
import os

os.getcwd()
Out[6]:
'/home/lbalhar/Dropbox/Projekty/naucse.python.cz/lessons/feedback/ostrava2'

Absolutní a relativní cesty

Cesta k souboru je buď absolutní nebo relativní. Absolutní cesta obsahuje celou cestu od kořene souborového systému až po soubor samotný. Relativní cesta obsahuje cestu od jednoho souboru k druhému. V relativní cestě tečka . znázorňuje aktuální složku a dvě tečky .. složku nadřazenou.

Příklady absolutních cest

  • /home/hanka/slozka/soubor.txt
  • C:\Users\Hanka\slozka\soubor.txt

Příklady relativních cest

  • slozka/soubor.txt
  • ./slozka/soubor.txt
  • ../../slozka/soubor.txt
  • slozka\soubor.txt
  • ..\..\slozka\soubor.txt

Práce s cestami a spojování

In [7]:
os.path.join("složka", "složka", "soubor.csv")
Out[7]:
'složka/složka/soubor.csv'
In [8]:
os.path.expanduser("~/slozka/u/me/doma")
Out[8]:
'/home/lbalhar/slozka/u/me/doma'

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.