2017-01-18 9 views
0

forループを使用してpandasデータフレームの列を読み込み、ネストされたif文を使用してdatetimeの範囲の最小値と最大値を検索しています。forループのdtypeの処理

私は必要なdatetime列を特定できますが、dataframe.series.min()およびmaxステートメントにcolumn変数を渡す正しい方法が見つかりません。

import pandas as pd 
data = pd.somedata() 

for column in data.columns: 

    if data[column].dtype == 'datetime64[ns]': 
     data.column.min() 
     data.column.max() 

column変数が渡されたときにループは、このような日付時刻値を返す必要があります:

data.DFLT_DT.min() 

Timestamp('2007-01-15 00:00:00') 


data.DFLT_DT.max() 

Timestamp('2016-10-18 00:00:00') 
+0

私は何をしたいの推測を取ることができますが、それは私たちを見るのがベストです例。 – piRSquared

+0

'if data [col] .dtype.name == 'datetime64 [ns]':' 'dtype'は' np.dtype'オブジェクトです – EdChum

答えて

1

あなただけのこれを達成するためにselect_dtypesを使用することができます。

In [104]: 
df = pd.DataFrame({'int':np.arange(5), 'flt':np.random.randn(5), 'str':list('abcde'), 'dt':pd.date_range(dt.datetime.now(), periods=5)}) 
df 

Out[104]: 
          dt  flt int str 
0 2017-01-18 16:50:13.678037 -0.319022 0 a 
1 2017-01-19 16:50:13.678037 0.400441 1 b 
2 2017-01-20 16:50:13.678037 0.114614 2 c 
3 2017-01-21 16:50:13.678037 1.594350 3 d 
4 2017-01-22 16:50:13.678037 -0.962520 4 e 

In [106]: 
df.select_dtypes([np.datetime64]) 

Out[106]: 
          dt 
0 2017-01-18 16:50:13.678037 
1 2017-01-19 16:50:13.678037 
2 2017-01-20 16:50:13.678037 
3 2017-01-21 16:50:13.678037 
4 2017-01-22 16:50:13.678037 

その後のことができます。これらの列だけにmin,maxを入力してください:

In [108]: 
for col in df.select_dtypes([np.datetime64]): 
    print('column: ', col) 
    print('max: ',df[col].max()) 
    print('min: ',df[col].min()) 

column: dt 
max: 2017-01-22 16:50:13.678037 
min: 2017-01-18 16:50:13.678037 

あなたの試みが失敗した理由を答えるために、あなたは文字列でnp.dtypeオブジェクトを比較している、あなたはnp.dtype.nameと比較したい:

In [125]: 

for col in df: 
    if df[col].dtype.name == 'datetime64[ns]': 
     print('col', col) 
     print('max', df[col].max()) 
     print('min', df[col].min()) 

col dt 
max 2017-01-22 16:50:13.678037 
min 2017-01-18 16:50:13.678037 
+0

ありがとう、これは素晴らしいです。私は 'numpy'と' datetime'ライブラリをインポートして動作させる必要がありました。 'pandas'は' datetime'と 'dtype'を扱うためのネイティブサポートを持っているようです。なぜなら' data.col.min() 'を実行すると値を返すからです。 'pandas'の中でネイティブにできるかどうか疑問に思っていますか? (私はスクリプトの依存関係の数を減らそうとしています)。 – joshi123

+1

私は 'numpy'を避けることはできませんが、' datetime'はここでは必要ではないと思います。 'pd.to_datetime'を使ってdatetimeを作ることもできます – EdChum

関連する問題