Remove Python2 numeric relics
- [ ] closes #xxxx
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Modernize the code to Python 3 by removing Python 2 numeric hacks, such as:

- `a / b` of two integers now always returns a float, so no need to convert `a` and/or `b` to float (or to use float literals)
- `a // b` of two integers returns an integer, use it instead of `int(a / b)`
- `math.ceil`, `math.floor`, and `round` return integer, so no need to convert the result to integer
- `1e6` is a float, converting it to `int(1e6)` is slower than `10 ** 6` (or `1_000_000`)

> Nice, thanks @eumiro !
> 
> Did you use some tool to find these, or was it just inspection?

Thank you. It was manual search&replace (with at least one typo as you could see, thank you, fixed, repushed), because every case is different. Usually it is a good idea to search for `int(`, `float(`, `round`, `math.`, `\de\d`, `\d\.0\b`, etc. 