尝试访问Pandas系列中的元素时出错

时间:2016-05-10 18:58:37

标签: python datetime pandas dataframe

我正在尝试做一些非常简单的事情:

last_id = len(bg_dt['time']) - 1
last_time = insight_date_to
if last_id >  0:
    print("last_id is %d"%last_id)
    print(bg_dt['time'])
    print(type(bg_dt['time']))
    print(type(last_id))
    print(bg_dt['time'][0])
    last_time = bg_dt['time'][last_id]

这会产生以下输出:

Name: time, dtype: datetime64[ns]
<class 'pandas.core.series.Series'>
<class 'int'>
  

KeyError:0

这里发生了什么?以下是我验证过的内容:

  • 我使用int作为索引
  • 我正在尝试将[]与系列
  • 一起使用
  • 我不会出界

与详细信息一样,我使用的是Python 3并在Jupyter笔记本上运行。

以下是bg['time']

的示例
442751   2016-04-26 09:00:00
445544   2016-04-26 18:00:00
445539   2016-04-27 09:00:00
450923   2016-04-27 18:00:00
450922   2016-04-28 09:00:00
474301   2016-04-29 18:00:00
474298   2016-04-30 09:00:00
474300   2016-04-30 09:00:00
474299   2016-04-30 18:00:00

这里是insight_date_to,一个日期时间对象2016-05-01 00:00:00

1 个答案:

答案 0 :(得分:0)

我认为更好的是使用iloc,如指向conner.xyz,用0选择第一个值,用-1选择最后一个值:

print bg_dt
                      time
442751 2016-04-26 09:00:00
445544 2016-04-26 18:00:00
445539 2016-04-27 09:00:00
450923 2016-04-27 18:00:00
450922 2016-04-28 09:00:00
474301 2016-04-29 18:00:00
474298 2016-04-30 09:00:00
474300 2016-04-30 09:00:00
474299 2016-04-30 18:00:00

print(bg_dt.iloc[0].time)
print(bg_dt.iloc[-1,:].time)
2016-04-26 09:00:00
2016-04-30 18:00:00

或者:

print(bg_dt.time.iloc[0])
print(bg_dt.time.iloc[-1])
2016-04-26 09:00:00
2016-04-30 18:00:00

要检查DataFrameempty

bg_dt = pd.DataFrame()

if not bg_dt.empty:

    print(bg_dt.iloc[0].time)
    print(bg_dt.iloc[-1,:].time)

    print(bg_dt.time.iloc[0])
    print(bg_dt.time.iloc[-1])