熊猫DataFrame日期时间索引切片错误
我很好奇为什么我可以给切片赋值,但不能直接打印出来。以下代码显示细节:熊猫DataFrame日期时间索引切片错误
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???
错误消息:
类型错误:不能做切片索引阶级“pandas.tseries.index.DatetimeIndex这些索引类[1]‘诠释’
为什么我可以赋值但不能打印此片?
非常感谢您的检查。
我觉得首先看起来像错误:
df.loc[:1, 'sales'] = 100
我觉得更好的是使用iloc
如果需要的位置seelct - 但需要get_loc
为sales
柱的位置太:
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
谢谢Jezrael。你的评论给了我一个火花,是的,也许这是一个错误。我也学到了你的解决方案,是的,那很好。我现在有另一个解决方案,使用ix。 df.ix [:1,'sales'] = 100,我们可以打印df.ix [:1,'sales']。因为ix可以使用索引,行/列序列和名称组合。 –
是的,'ix'帮助,但在最新版本是[弃用](http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated)。 – jezrael
哦,这是一个惊喜。那么我现在更喜欢你的解决方案。你知道他们弃用它的原因吗? –
它看起来像臭虫。 – jezrael