2016-07-21 7 views
1

これは動作します:パンダインデックスからの暗黙の型キャストを

s['Date'] = s.index.get_level_values('Date') 
    s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s['Date']) 

しかし、これはしません:

s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date')) 

エラーは次のとおりです。

pandas/index.pyx in pandas.index.IndexEngine.get_indexer_non_unique (pandas/index.c:6148)() 

TypeError: 'NoneType' object is not iterable 

sが持つパンダのデータフレームでありますマルチインデックス。

私は主になぜ作品が興味を持っているのですか?私が見ているように、どちらもうまくいくはずです。私にとって

+0

試してみてください[0123] [= Expired Days '] =(pd.to_datetime(s [' Expiration ']) - s.index.get_level_values(' Date ')。to_series())' – jezrael

+0

エラーを生成します。一意でないインデックスの_join_levelは実装されていません。 日付は独自のものではなく、複数のインデックスの一部です。 – cjm2671

+0

はい、同じエラーが発生します。だから1つの可能な解決策は、numpy配列で動作します。 – jezrael

答えて

1

は、変換するためのvaluesを追加作品Seriesnumpy arrayへ:

s['Expire Days'] = pd.to_datetime(s['Expiration']).values - 
        s.index.get_level_values('Date') 

サンプル:コメントによって

import pandas as pd 

s = pd.DataFrame({'Expiration': {(pd.Timestamp('2015-03-04 00:00:00'), 1): '2015-03-05', 
           (pd.Timestamp('2015-03-03 00:00:00'), 2): '2015-03-05'}}) 
s = s.rename_axis(['Date','a']) 
print (s) 
       Expiration 
Date  a    
2015-03-03 2 2015-03-05 
2015-03-04 1 2015-03-05 


s['Expire Days'] = pd.to_datetime(s['Expiration']).values - 
        s.index.get_level_values('Date') 
print (s) 
       Expiration Expire Days 
Date  a       
2015-03-04 1 2015-03-05  1 days 
2015-03-03 1 2015-03-05  2 days 

EDIT:

s['Date'] = s.index.get_level_values('Date') 
s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s['Date']) 

作業素敵な、ndarrayための出力として、 get_level_valuesは、Expire DaysSeriesに変換されます。


s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date')) 

doesntの仕事、pd.to_datetime(S [ '期限が'])Seriess.index.get_level_values('Date')ndarrayあります。だから、あなたは両方の配列が必要です。

とエラー理由:pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date').to_series()

"Index._join_level on non-unique index is not implemented."

は、ndarrayの両方に変換します。

+0

私はこの作品に同意しますが、私は理解していません*理由*それは動作します。さらに、numpyの 'indexless'キャスティングが保証されていますか? – cjm2671

+0

出力は配列であり、辞書ではないので、順序は問題ではないと思います。 – jezrael

+0

正直言って、私はこの作品を理解していますが、それは本当に私の元の質問に答えるものではありません。 – cjm2671

関連する問題