If you really really want to do this, here's how
In [9]: df = DataFrame(dict(date=date_range('20130101',periods=5)))
In [11]: df['date2'] = [ datetime.date(v.year,v.month,v.day) for v in df.date ]
In [12]: df
Out[12]:
date date2
0 2013-01-01 2013-01-01
1 2013-01-02 2013-01-02
2 2013-01-03 2013-01-03
3 2013-01-04 2013-01-04
4 2013-01-05 2013-01-05
[5 rows x 2 columns]
In [13]: df.dtypes
Out[13]:
date datetime64[ns]
date2 object
dtype: object
In [14]: df.head()
Out[14]:
date date2
0 2013-01-01 2013-01-01
1 2013-01-02 2013-01-02
2 2013-01-03 2013-01-03
3 2013-01-04 2013-01-04
4 2013-01-05 2013-01-05
[5 rows x 2 columns]
In [15]: df['date2']
Out[15]:
0 2013-01-01
1 2013-01-02
2 2013-01-03
3 2013-01-04
4 2013-01-05
Name: date2, dtype: object
In [16]: df.ix[0,'date2']
Out[16]: datetime.date(2013, 1, 1)
The reason this is 'restrictive' is datetime.datetime is a superset of datetime.date so no actual reason to have it
since it cannot be vectorized and is just plain confusing
you can also do this with Period's if you want to represent 'dates' with no times