【问题标题】:Why .loc doesn't work in Python Pandas Series?为什么 .loc 在 Python Pandas 系列中不起作用?
【发布时间】:2020-05-08 16:35:34
【问题描述】:

我通过过滤器获得所需的日期“2013-09-12”行。是不是因为标签“日期”是一个不合时宜的标签,而不合时宜是“2013-09-12”日期。我相信,'.loc' 正在查看列和行标签值。我的理解正确吗?

mean_altitudes_perday = grouped_bydates.altitude.mean()

print(mean_altitudes_perday)
print(mean_altitudes_perday.loc[mean_altitudes_perday['date']] == '2013-09-12') # Why loc is not working here?


# Q: What is the mean altitude of the birds on 2013-09-12?
# A: print(mean_altitudes_perday.filter(like='2013-09-12', axis=0))

错误信息:

date
2013-08-15    134.092000
2013-08-16    134.839506
2013-08-17    147.439024
2013-08-18    129.608163
2013-08-19    180.174797
                 ...    
2014-04-26     15.118012
2014-04-27     23.897297
2014-04-28     37.716867
2014-04-29     19.244792
2014-04-30     13.954545
Name: altitude, Length: 259, dtype: float64
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
   4410             try:
-> 4411                 return libindex.get_value_at(s, key)
   4412             except IndexError:

# Had to delete a lot of error code due to posting requirements

KeyError: 'date'

【问题讨论】:

  • 在您的系列中,date 是一个索引,而不是一个列。可以看Series.loc的语法,需要mean_altitudes_perday.loc['2013-09-12']

标签: python pandas series


【解决方案1】:

看起来mean_altitudes_perday是一个系列,索引名为date

可能某些 DataFrame 包含 datealtitude 列,而您 创建 mean_altitudes_perday 执行如下操作:

mean_altitudes_perday = df.set_index('date').altitude

如果打印输出的最后一行,请注意Name: altitude。 这只是 Series 的一个名称,继承自原始版本 列名。 索引也是继承的,具有其原始名称。

当你执行像mean_altitudes_perday['date'] 这样的东西时, Pandas 尝试在索引中查找 'date'(一个字符串)并返回 这个系列的对应元素。

由于索引没有元素 == 'date',因此引发异常 (KeyError)。

这个异常的更有意义的名称可能是 IndexError (索引中没有对应的值),但我们对此无能为力。

但是如果你执行例如mean_altitudes_perday['2013-08-19'],你会得到 一个值(180.174797)。

您也可以运行mean_altitudes_perday.loc['2013-08-19'](更一般地说, 传递任何现有的索引值),结果相同。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2021-09-15
    • 2017-05-05
    • 2022-11-03
    • 1970-01-01
    • 2019-07-15
    • 2016-12-04
    • 2019-12-02
    • 2021-08-29
    相关资源
    最近更新 更多