2017-04-04 22 views
7

私はパンダのデータフレームの型が日付型かどうかに基づいてフィルタリングしようとしています。どれがどれであるかわかりますが、その出力を解析したり、手動で列を選択する必要があります。私は日付の列を自動的に選択したい。これまでの例では、この例では「date_col」列のみを選択したいと考えています。pandasデータフレームの列が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の列を含める必要があります。整数でフィルタリングするには、float:[np.float32, np.float64, np.float16, np.float]の場合は[np.int64, np.int32, np.int16, np.int]を使用し、数字列のみをフィルタリングする場合は[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 
関連する問題