2017-04-04 81 views
7

我想根據它們是否是日期類型來過濾熊貓數據框中的列。我可以找出哪些是,但然後將不得不解析該輸出或手動選擇列。我想自動選擇日期列。這是我迄今爲止的一個例子 - 在這種情況下,我只想選擇'date_col'列。如何判斷熊貓數據框中的列是否爲datetime類型?如何判斷一列是否是數字?

import pandas as pd 
df = pd.DataFrame([['Feb-2017', 1, 2], 
        ['Mar-2017', 1, 2], 
        ['Apr-2017', 1, 2], 
        ['May-2017', 1, 2]], 
        columns=['date_str', 'col1', 'col2']) 
df['date_col'] = pd.to_datetime(df['date_str']) 
df.dtypes 

輸出:

date_str   object 
col1     int64 
col2     int64 
date_col datetime64[ns] 
dtype: object 

回答

10

熊貓具有稱爲select_dtypes陰涼功能,這可能需要或者排除或包括(或兩者)作爲參數。它根據dtypes過濾數據幀。所以在這種情況下,您可能需要包含dtype np.datetime64的列。要按整數進行過濾,您可以使用[np.int64, np.int32, np.int16, np.int]進行浮點數:[np.float32, np.float64, np.float16, np.float],以僅使用數字列進行過濾:[np.number]

df.select_dtypes(include=[np.datetime64]) 

輸出:

date_col 
0 2017-02-01 
1 2017-03-01 
2 2017-04-01 
3 2017-05-01 

在:

df.select_dtypes(include=[np.number]) 

輸出:

col1 col2 
0 1  2 
1 1  2 
2 1  2 
3 1  2 
1

位醜陋numpy的替代:

In [102]: df.loc[:, [np.issubdtype(t, np.datetime64) for t in df.dtypes]] 
Out[102]: 
    date_col 
0 2017-02-01 
1 2017-03-01 
2 2017-04-01 
3 2017-05-01 

In [103]: df.loc[:, [np.issubdtype(t, np.number) for t in df.dtypes]] 
Out[103]: 
    col1 col2 
0  1  2 
1  1  2 
2  1  2 
3  1  2