2015-10-05 76 views
0

我正在閱讀Excel文件,並且在閱讀Excel文件時需要正確處理日期。通常情況下,列將被稀疏地填充日期,其餘將是空白。如果我閱讀它,它總是作爲object dtype讀取。我想要正確地將它們更改爲datetime64[ns],同時不會錯誤地轉換實際的數字列。強制轉換日期Pandas中的列值爲空

d = {1: {'DateCol': '02/01/2014', 'NotDateCol': 12457}, 2: {'DateCol': np.nan, 'NotDateCol': 45677}} 
df = pd.DataFrame.from_dict(d,orient='index') 
In [96]: df.dtypes 
Out[96]: 
NotDateCol  int64 
DateCol  object 
dtype: object 

好了,所以,如果你看看這個,你可以清楚地看到DateCol是一個日期:

NotDateCol  DateCol 
1  12457 02/01/2014 
2  45677   NaN 

現在我需要一些聰明的辦法日期列轉換爲日期,不知道頭名或類型事先

試圖只使用to_datetime強制轉換的整數日期,像這樣:

In [97]: for col in df.columns: 
    df[col] = pd.to_datetime(df[col]) 
    ....:  

In [98]: df 
Out[98]: 
        NotDateCol DateCol 
1 1970-01-01 00:00:00.000012457 2014-02-01 
2 1970-01-01 00:00:00.000045677  NaT 

In [99]: df.dtypes 
Out[99]: 
NotDateCol datetime64[ns] 
DateCol  datetime64[ns] 
dtype: object 

是否有任何體面的智能方式來使這個工作,這將正確地挑出Datetime類列並將其轉換,而不是將數字轉換爲1970-01-01?

+0

那麼你將如何確定一個日期嗎?與'/'模式? –

+0

加載後,您是否嘗試過'df.convert_objects()'? – JoeCondron

+0

@ColonelBeauvel,日期應該是明顯的。基本上是一個非整數,可以強制在Pandas中約會。幾乎就像我說的「熊貓使用你的正常日期強制,除了整數不是日期」 – user1610719

回答

1

你需要強制它。按照documentation

convert_dates:布爾值,默認爲true

如果真,轉換爲日期,其中 可能。如果'強制',強制轉換,不可轉換的值 成爲NaT。

convert_ints標誌默認爲false,所以在這種情況下:

In [51]: 
d = {1: {'DateCol': '02/01/2014', 'NotDateCol': 12457}, 2: {'DateCol': np.nan, 'NotDateCol': 45677}} 
df = pd.DataFrame.from_dict(d,orient='index').convert_objects(convert_dates='coerce') 

In [52]: 
df.dtypes 

Out[52]: 
NotDateCol    int64 
DateCol  datetime64[ns] 
dtype: object 
相關問題