Skip to content

Commit 6f02df9

Browse files
committed
BUG: cast datetime64 values to nanoseconds in DataFrame ctor. close #2095
1 parent 5ed523c commit 6f02df9

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

RELEASE.rst

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ pandas 0.9.1
4444
- Fix unstacking edge case with unrepresented groups (#2100)
4545
- Fix Series.str failures when using pipe pattern '|' (#2119)
4646
- Fix pretty-printing of dict entries in Series, DataFrame (#2144)
47+
- Cast other datetime64 values to nanoseconds in DataFrame ctor (#2095)
4748
4849
pandas 0.9.0
4950
============

pandas/core/internals.py

+2
Original file line numberDiff line numberDiff line change
@@ -1254,6 +1254,8 @@ def form_blocks(data, axes):
12541254
elif issubclass(v.dtype.type, np.complexfloating):
12551255
complex_dict[k] = v
12561256
elif issubclass(v.dtype.type, np.datetime64):
1257+
if v.dtype != _NS_DTYPE:
1258+
v = lib.cast_to_nanoseconds(v)
12571259
datetime_dict[k] = v
12581260
elif issubclass(v.dtype.type, np.integer):
12591261
int_dict[k] = v

pandas/tseries/tests/test_timeseries.py

+17
Original file line numberDiff line numberDiff line change
@@ -1797,6 +1797,23 @@ def test_min_max_series(self):
17971797
self.assertTrue(isinstance(result, Timestamp))
17981798
self.assertEqual(result, exp)
17991799

1800+
def test_from_M8_structured(self):
1801+
dates = [ (datetime(2012, 9, 9, 0, 0),
1802+
datetime(2012, 9, 8, 15, 10))]
1803+
arr = np.array(dates,
1804+
dtype=[('Date', '<M8[us]'), ('Forecasting', '<M8[us]')])
1805+
df = DataFrame(arr)
1806+
1807+
self.assertEqual(df['Date'][0], dates[0][0])
1808+
self.assertEqual(df['Forecasting'][0], dates[0][1])
1809+
1810+
s = Series(arr['Date'])
1811+
self.assertTrue(s[0], Timestamp)
1812+
self.assertEqual(s[0], dates[0][0])
1813+
1814+
s = Series.from_array(arr['Date'], Index([0]))
1815+
self.assertEqual(s[0], dates[0][0])
1816+
18001817
class TestLegacyCompat(unittest.TestCase):
18011818

18021819
def setUp(self):

0 commit comments

Comments
 (0)