2016-11-21 121 views
7

我認爲這必須是一個熊貓的故障,熊貓系列(v.18.1和19太),如果我指定一個日期的系列,第一次它被添加爲int (錯誤),第二次它被添加爲日期時間(正確),我不明白原因。Python熊貓系列故障日期時間

例如,此代碼:

import datetime as dt 
import pandas as pd 
series = pd.Series(list('abc')) 
date = dt.datetime(2016, 10, 30, 0, 0) 
series["Date_column"] =date 
print("The date is {} and the type is {}".format(series["Date_column"], type(series["Date_column"]))) 
series["Date_column"] =date 
print("The date is {} and the type is {}".format(series["Date_column"], type(series["Date_column"]))) 

輸出是:

The date is 1477785600000000000 and the type is <class 'int'> 
The date is 2016-10-30 00:00:00 and the type is <class 'datetime.datetime'> 

正如你所看到的,它第一次總是設定值INT而不是日期時間。

有人可以幫我嗎?, 非常感謝你提前, Javi。

+1

我不知道是什麼原因導致此行爲,但在向字符串列添加日期時應該小心。你知道你正在添加一行,而不是一列,對嗎? – IanS

+1

這聽起來像一個bug,'系列'支持混合dtypes,所以它看起來像日期時間被強制爲初始分配int,但然後覆蓋相同的索引標籤位置產生預期的行爲。我會在[github]上發佈一個問題(https://github.com/pandas-dev/pandas/issues) – EdChum

+0

非常感謝EdChum – bracana

回答

0

原因是這個系列是一個'對象'類型,而熊貓DataFrame(或一個系列)的列是同類型的。你可以用D型(或DataFrame.dtypes)檢查一下:

series = pd.Series(list('abc')) 
series 
Out[3]: 
0 a 
1 b 
2 c 
dtype: object 

In [15]: date = dt.datetime(2016, 10, 30, 0, 0) 
date 
Out[15]: datetime.datetime(2016, 10, 30, 0, 0) 

In [18]: print(date) 
2016-10-30 00:00:00 

In [17]: type(date) 
Out[17]: datetime.datetime 

In [19]: series["Date_column"] = date 
In [20]: series 

Out[20]: 
0        a 
1        b 
2        c 
Date_column 1477785600000000000 
dtype: object 

In [22]: series.dtype 

Out[22]: dtype('O') 

只有通用的「對象」 D型可以容納任何Python對象(在你的情況下,插入一個datetime.datetime對象在系列)。

此外,Pandas系列是基於Numpy Arrays,它不是混合類型,並且失敗了使用Pandas DataFrames和Series或Numpy的計算優勢的目的。

你可以用python list()來代替嗎?或DataFrame()?