2017-08-08 95 views
1

數據幀的行我有這樣一個數據幀:卸下含有某種類型

>>> d 
Out[28]: 
         A      B  C  D  E 
2017-06-08 20:39:00 1260.00 1903-08-12 00:00:00 230.00 245.00 19954.55 
2017-06-08 20:40:00 1260.00     1330 230.00 245.00 19966.51 
2017-06-08 20:48:00 1260.00     1320 230.00 240.00 19961.00 
2017-06-08 21:02:00 1240.00     1330 230.00 245.00 19951.38 
2017-06-08 21:06:00 1240.00     1340 5.00 240.00 19966.84 
2017-06-08 21:07:00 1240.00     1350 220.00 230.00 20000.24 
2017-06-08 21:08:00 1250.00     1370 220.00 230.00 20004.66 
2017-06-11 20:31:00 1220.00     1280 235.00 245.00 19913.86 

我想刪除(除了在A列)中的所有值,並且是類型datetime.datetime(這裏的第一個中的B欄)。我嘗試以下,但沒有工作(的意圖是時間值轉換爲NaN,並刪除NaN值更高版本):

d[type(d)==pd.datetime]=np.nan 

我還與每個單獨列試過,即如下:

df=d['B'].copy() 
df[type(df)==pd.datetime]=np.nan 
+0

這是不可能的,因爲該列的日期時間可能是'O'。 –

+0

你想用某種東西替換它們還是完全放下它們? –

+0

謝謝,我想放下它們。 – dayum

回答

2

簡單的boolean indexing是不夠的。您需要檢查每個項目的日期時間。

輸入:

In [239]: df 
Out[239]: 
        Col1     Col2 
0 1903-08-12 00:00:00     1 
1     1     abc 
2     2     2 
3     1234     1234 
4     abc 1903-08-12 00:00:00 

選項1

使用df.applypd.to_datetime,隨後df.isnullboolean indexing。使用df.dropna刪除與NaN行。

In [290]: df[df.apply(pd.to_datetime, errors='coerce').isnull()].dropna() 
Out[290]: 
    Col1 Col2 
1  1 abc 
2  2  2 
3 1234 1234 

選項2

pd.datetime(不使用df.apply)的直接應用:

In [57]: df[pd.to_datetime(df.stack(), 'coerce').unstack().isnull()].dropna() 
Out[57]: 
    Col1 Col2 
1  1 abc 
2  2  2 
3 1234 1234 

選項3

使用df.mask(謝謝piRSquared!)

In [62]: df.mask(pd.to_datetime(df.stack(), 'coerce').notnull().unstack()).dropna() 
Out[62]: 
    Col1 Col2 
1  1 abc 
2  2  2 
3 1234 1234 

選項4

您可以使用df.applymap

In [240]: df[~df.applymap(lambda x: isinstance(x, pd.datetime))].dropna() 
Out[240]: 
    Col1 Col2 
1  1 abc 
2  2  2 
3 1234 1234 
+0

@piRSquared無法弄清楚如何調用它... x(請回答? –

+0

謝謝,我發現了另一個解決方案,下面發佈了,你們認爲有一些缺點嗎? – dayum

+0

'df.mask(pd.to_datetime(df。 (),'coerce')。notnull()。unstack())' – piRSquared

0

我找到了另一種解決辦法,不知道這是最好的。

df= d.iloc[:,1:].convert_objects(convert_dates=False,convert_numeric =True) 
df.dropna() 
+0

是的,這有一個缺點,因爲1.它被棄用2.它轉換字符串並失敗,所以它們也成爲NaN。 –

相關問題