Q: DataFrame `loc` and `iloc` seem to have inconsistent negative indexing behaviors.
With version: 0.20.3, DataFrame `loc` and `iloc` have inconsistent and buggy indexing behaviors.

```python
df = pd.DataFrame([dict(idx=idx) for idx in range(10)])
print(df.loc[range(3) + range(-3, 0), 'idx'])
```
returns NaN for negative indices
```
 0    0.0
 1    1.0
 2    2.0
-3    NaN
-2    NaN
-1    NaN
```
(*also note that somehow the `int` became `float`...*)

whereas
```python
print(df.iloc[range(3) + range(-3, 0)])
```
returns the last raws
```
0    0
1    1
2    2
7    7
8    8
9    9
```

Additionally, `loc` fails if only negative indices are passed:
```df.loc[[-2, -1], 'idx']```
but not if both positive and negative
```df.loc[[0, -1], 'idx']```