Issue 1:
Code to reproduce:

passes1 = '''<html>
<head>
<title>test</title>
</head>
<body>
<table>
<tr>
<td>a</td>
</tr>
</table>
<table>
<tr>
<td>b</td>
</tr>
</table>
<table>
<td>c</td>
</tr>
</table>
</body>
</html>'''

passes2 = '''<html>
<head>
<title>test</title>
</head>
<body>
<table>
<td>a</td>
</tr>
</table>
<table>
<tr>
<td>a</td>
</tr>
</table>
<table>
<tr>
<td>b</td>
</tr>
</table>
</body>
</html>'''

fails1 = '''<html>
<head>
<title>test</title>
</head>
<body>
<table>
<tr>
<td>a</td>
</tr>
</table>
<table>
<tr>
<td>a</td>
</tr>
</table>
<table>
<td>b</td>
</tr>
</table>
</body>
</html>'''

fails2 = '''<html>
<head>
<title>test</title>
</head>
<body>
<table>
<td>a</td>
</tr>
</table>
<table>
<td>a</td>
</tr>
</table>
<table>
<tr>
<td>b</td>
</tr>
</table>
</body>
</html>'''

import pandas as pd

df_passes1 = pd.read_html(passes1, flavor='bs4')
print("passes1", df_passes1)

df_passes2 = pd.read_html(passes2, flavor='bs4')
print("passes2", df_passes2)

df_fails1 = pd.read_html(fails1, flavor='bs4')
print("fails1", df_fails1)

df_fails2 = pd.read_html(fails2, flavor='bs4')
print("fails2", df_fails2)

Output:

passes1 [ 0
0 a, 0
0 b, 0
0 c]
passes2 [ 0
0 a, 0
0 a, 0
0 b]
fails1 [ 0
0 a, 0
0 b]
fails2 [ 0
0 a, 0
0 b]

Problem description:

Each of the html examples contain one or more missing <tr> tags. When identical tables and missing <tr> tag(s) are present in html, read_table() with bs4 and html5lib flavors produce inconsistent results. This results in duplicate tables getting dropped from the created dataframe as seen in fails1 and fails2. I expect their dataframe produced to be the same as passes2.

Expected Output:

passes1 [ 0
0 a, 0
0 b, 0
0 c]
passes2 [ 0
0 a, 0
0 a, 0
0 b]
fails1 [ 0
0 a, 0
0 a, 0
0 b]
fails2 [ 0
0 a, 0
0 a, 0
0 b]

Output of pd.show_versions()

>>> pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.1.final.0
python-bits: 64
OS: Darwin
OS-release: 16.7.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8

pandas: 0.20.3
pytest: None
pip: 9.0.1
setuptools: 36.2.7
Cython: None
numpy: 1.13.1
scipy: None
xarray: None
IPython: None
sphinx: None
patsy: None
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: 2.0.2
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: 3.8.0
bs4: 4.6.0
html5lib: 0.999999999
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: None
s3fs: None
pandas_gbq: None
pandas_datareader: None

Issue 2:
related #6066 (on Float64Index too)

The 'KeyError' on slicing was discussed multiple times but I'm still not sure if the issue below is a bug or just my misunderstanding.

I'm experiencing 'KeyError' from time to time when I try to slice my dataframes with datetime or Timestamp objects, however slicing with strings works perfectly. I was unable to construct synthetic example with pandas.date_range, so I needed to upload the piece of real data where the issue appears:

https://www.dropbox.com/s/ibzbwqs35tiydyc/tmp.h5

df = pd.read_hdf('tmp.h5', 'data')
print df.head()

When I try to slice it with the pandas.Timestamp objects it results in 'KeyError':

tt1 = pd.Timestamp('2006-11-16 18:30:00')
tt2 = pd.Timestamp('2006-11-16 18:40:00')
print df.ix[tt1:tt2].head()

Same for datetime objects:

tt1 = pd.Timestamp('2006-11-16 18:30:00').to_datetime()
tt2 = pd.Timestamp('2006-11-16 18:40:00').to_datetime()
print df.ix[tt1:tt2].head()

However this slicing works perfectly:

tt1 = pd.Timestamp('2006-11-16 18:30:00').strftime('%Y-%m-%d %H:%M:%S')
tt2 = pd.Timestamp('2006-11-16 18:40:00').strftime('%Y-%m-%d %H:%M:%S')
print df[tt1:tt2].head()

Numpy version 1.8.0

Pandas version 0.13.0