2017-10-11 23 views
2

スライスに値を割り当てることはできますが、直接印刷することはできません。pandas DataFrame DatetimeIndexスライスエラー

import pandas as pd 
import numpy as np 
from datetime import datetime 

dt_start = datetime.strptime("20171010", "%Y%m%d") 
dt_end = datetime.strptime("20171020", "%Y%m%d") 

df = pd.DataFrame(np.nan, index=pd.date_range(start=dt_start, end=dt_end), columns=['sales', 'account']) 

df.loc[:1, 'sales'] = 100 # works well 
print(df.loc[:1, 'sales']) # error, why??? 

エラーメッセージ:
はTypeError:クラス上のスライスインデックス作成を行うことができない「これらのインデクサーでpandas.tseries.index.DatetimeIndex [1]クラスの「int型

なぜ私のコードの後に​​は詳細を示し値を割り当てることはできますが、このスライスは印刷できませんか?

ありがとうございます。

+0

それはバグのように見えます。 – jezrael

答えて

1

私が最初のバグのように見えると思う:

df.loc[:1, 'sales'] = 100 

私はより良いが、必要性は位置によってseelct場合ilocを使用していると思います - しかし、あまりにも列salesの位置のためのget_locが必要になります。

df.iloc[:1, df.columns.get_loc('sales')] = 100 
print (df) 
      sales account 
2017-10-10 100.0  NaN 
2017-10-11 NaN  NaN 
2017-10-12 NaN  NaN 
2017-10-13 NaN  NaN 
2017-10-14 NaN  NaN 
2017-10-15 NaN  NaN 
2017-10-16 NaN  NaN 
2017-10-17 NaN  NaN 
2017-10-18 NaN  NaN 
2017-10-19 NaN  NaN 
2017-10-20 NaN  NaN 

print (df.iloc[:1, df.columns.get_loc('sales')]) 
2017-10-10 NaN 
Freq: D, Name: sales, dtype: float64 

print (df.columns.get_loc('sales')) 
0 
+0

Jezraelありがとうございます。あなたのコメントは私に火花を与えます、はい、多分それはバグです。私はあなたの解決策も学びました、はい、それは素晴らしいことです。私は別の解決策を今、ixを使用しています。 df.ix [:1、 'sales'] = 100、df.ix [:1、 'sales']を印刷することができます。 ixはインデックス、行/列seq、および名前の組み合わせを使用できるためです。 –

+0

はい、 'ix'ヘルプですが、最後のバージョンは[非推奨]です(http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated)。 – jezrael

+0

ああ、それは驚きです。それでは、私は今あなたの解決策を好むでしょう。彼らがそれを非難した理由を知っていますか? –