2017-06-20 51 views
-2

我有一個熊貓數據框,其中有包含日期​​的列。熊貓發現日期以外的值

我需要確保沒有別的,但日期包含在這些列中。有沒有人有任何建議如何做到這一點? 我想過簡單地找到哪些行包含日期以外的類型的數據 - 雖然我不知道如何對其進行編碼。

任何幫助,將不勝感激!

+0

爲什麼你就不能嘗試轉換元素轉換成日期對象,如果失敗,則會損壞數據。 –

+0

這將有助於看到你認爲什麼是有效日期的例子,除了你可以做'df ['Date'] = pd.to_datetime(errors ='coerce')',然後調用'df .dropna()'因爲任何無效的日期字符串將被轉換爲'NaT' – EdChum

回答

0

如果數據未包含NaN S或None的價值觀,需要檢查是否所有的字符串衣被合計可轉換爲datetime使用applyto_datetime和參數errors='coerce',如果某個值無法解析什麼回報NaT。因此,然後用all添加notnull的面具,並選擇與loc

df = pd.DataFrame({'a':['2015-02-04','2015-02-05','2015-02-06'], 
        'b':['2015-02-06','2015-02-06', 'u'], 
        'c':['2015-01-01','d','2015-02-06']}) 
print (df) 
      a   b   c 
0 2015-02-04 2015-02-06 2015-01-01 
1 2015-02-05 2015-02-06   d 
2 2015-02-06   u 2015-02-06 

cols = ['a','b','c'] 
mask = df[cols].apply(pd.to_datetime, errors='coerce').notnull().all() 
print (mask) 
a  True 
b False 
c False 
dtype: bool 

print (df.loc[:, mask]) 
      a 
0 2015-02-04 
1 2015-02-05 
2 2015-02-06 

或者,如果需要檢查,如果一些列有已經dtypedatetime使用DataFrame.select_dtypes

df['a'] = pd.to_datetime(df['a']) 
print (df) 
      a   b   c 
0 2015-02-04 2015-02-06 2015-01-01 
1 2015-02-05 2015-02-06   d 
2 2015-02-06   u 2015-02-06 

print (df.dtypes) 
a datetime64[ns] 
b   object 
c   object 
dtype: object 

print (df.select_dtypes(include=['datetime'])) 
      a 
0 2015-02-04 
1 2015-02-05 
2 2015-02-06