type integrity failure astype vs read_csv
I'm having a problem with pandas where dataframes loaded from csv seem to revert to their origional dtypes when I set their indexes after processing. Look at this:

```
#Both these dicts contain columns and column types.  They are the same
# except for two records - dtypesA lists columns ('ga:date', 'ga:minute')
# as dtype('O') and dtypesB lists columns ('ga:date', 'ga:minute') as 
# dtype('int64')
dtypesA = {'ga:source': dtype('O'), 'ga:deviceCategory': dtype('O'),
    'ga:country': dtype('O'), 'ga:metro': dtype('O'), 'ga:date': dtype('O'), 
    'ga:minute': dtype('O'), 'ga:channelGrouping': dtype('O'), 'ga:sessions': 
    dtype('int64'), 'ga:transactions': dtype('int64')}

dtypesB = {'ga:source': dtype('O'), 'ga:deviceCategory': dtype('O'),
    'ga:country': dtype('O'), 'ga:metro': dtype('O'), 'ga:date': dtype('int64'), 
    'ga:minute': dtype('int64'), 'ga:channelGrouping': dtype('O'), 'ga:sessions': 
    dtype('int64'), 'ga:transactions': dtype('int64')}

dfA = pd.read_csv("my.csv", dtype=dtypesA)
dfB = pd.read_csv("my.csv", dtype=dtypesB)

#So the only difference between dfA and dfB now is that
# dfA has columns ('ga:date', 'ga:minute') typed as strings
# and dfB has columns ('ga:date', 'ga:minute') typed as
# ints.

dfB = dfB.astype(dtypesA)
dfB.dtypes
>ga:source              object
>ga:deviceCategory      object
>ga:country             object
>ga:metro               object
>ga:date                object
>ga:minute              object
>ga:channelGrouping     object
>ga:sessions             int64
>ga:transactions         int64
>dtype: object

dfA.dtypes
>ga:source              object
>ga:deviceCategory      object
>ga:country             object
>ga:metro               object
>ga:date                object
>ga:minute              object
>ga:channelGrouping     object
>ga:sessions             int64
>ga:transactions         int64
>dtype: object

#now both df's have the same dtypes.

indexCols = ['ga:source', 'ga:deviceCategory', 'ga:country', 'ga:metro', 
    'ga:date', 'ga:minute', 'ga:channelGrouping']

dfA.set_index(indexCols, inplace=True)
dfB.set_index(indexCols, inplace=True)

dfA.reset_index().dtypes
>ga:source              object
>ga:deviceCategory      object
>ga:country             object
>ga:metro               object
>ga:date                object
>ga:minute              object
>ga:channelGrouping     object
>ga:sessions             int64
>ga:transactions         int64
>dtype: object

dfB.reset_index().dtypes
>ga:source              object
>ga:deviceCategory      object
>ga:country             object
>ga:metro               object
>ga:date                int64
>ga:minute              int64
>ga:channelGrouping     object
>ga:sessions             int64
>ga:transactions         int64
>dtype: object

#Aditionally if I do a simple left join, you'll see that
# the indexs of both files don't join:

dfB[len(dfB.columns)] = 1
t = dfA.merge(dfB, how="left", left_index=True, 
right_index=True, suffixes = ('','_y'))
	
t.iloc[:,-1].notnull().any()
>False

#my merge ended up with no '1' values in the column I
# added, mean no indexes matched.

#lastly looking through the pandas docs for 
# DataFrame.reset_index i can use the type detection 
# method there in to determine that the values in 
# my index columns have reverted.

list(enumerate(dfA.index))[1][1][4]
>20180110
list(enumerate(dfA.index))[1][1][5]
>20

list(enumerate(dfB.index))[1][1][4]
>'20180110'
list(enumerate(dfB.index))[1][1][5]
>'20'

#So you can see that the detection of the types
# is different even though i've set both to 
# dtype('0') prior to the .set_index() method.
```

#### Problem description

You can see from the above, that after the I reset the
index my index columns go back to their original
data type instead of the data type I set them to.
Obviously the inability to depend on type consistency is
a big issue.

#### Expected Output

Types remain as declared (astype('O')) when setting and 
resetting index.

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: None
python: 3.7.0.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 158 Stepping 9, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.23.4
pytest: None
pip: 18.1
setuptools: 39.0.1
Cython: None
numpy: 1.15.1
scipy: None
pyarrow: None
xarray: None
IPython: None
sphinx: None
patsy: None
dateutil: 2.7.3
pytz: 2018.5
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: None
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: None
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: None
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
>>> 

</details>
