2017-04-04 20 views
7

Bir panda veri dosyasındaki sütunları, tipte olup olmadıklarına göre filtrelemeye çalışıyorum. Hangileri olduğunu anlayabiliyorum, ancak o çıktıyı ayrıştırmalı veya sütunları manuel olarak seçmeliyim. Tarih sütunlarını otomatik olarak seçmek istiyorum. Şu ana kadar bir örneğim var - sadece bu durumda 'date_col' sütununu seçmek istiyorum.Pandalar veri kümesindeki bir sütunun veri türü olup olmadığını nasıl anlarım? Bir sütunun sayısal olup olmadığını nasıl anlarım?

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 

Out:

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

cevap

10

Pandalar parametreleri olarak serin almak ya dışlamak ya da içerebilir select_dtypes denilen fonksiyonu, (veya her ikisi) sahiptir. Veri çerçevesini, dtypes'lere göre filtreler. Bu durumda, dtype np.datetime64 sütunlarını dahil etmek istersiniz. Tam sayılara göre filtrelemek için, [np.float32, np.float64, np.float16, np.float] float için [np.int64, np.int32, np.int16, np.int] kullanın, yalnızca sayısal sütunlara göre filtreleyebilirsiniz: [np.number].

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

Out:

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

yılında:

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

Out:

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

bit Numpy alternatif daha çirkin:

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 
İlgili konular