【问题标题】:Python pandas - boolean filtering. T/F vs. returning the tablePython pandas - 布尔过滤。 T/F vs. 返还表
【发布时间】:2019-04-23 02:03:12
【问题描述】:

我正在做一个练习,并且有一个学校信息数据集。我想按学年过滤数据,所以我有:

data['demographics'] = data['demographics'][data['demographics']['schoolyear'] == 20112012]

我不太了解作业开始时的数据['人口统计']。

如果我有:

data['demographics'] = [data['demographics']['schoolyear'] == 20112012]

代码返回 True 或 False,而不是表的实际数据。添加数据['demographics'] 如何让 Python 意识到我想要返回数据而不是 T/F?

【问题讨论】:

  • 请提供一个minimal reproducible example
  • df.loc[df['schoolyear']==20112012,'demographics']
  • 老实说,鉴于您的独家切片,我不知道您如何没有收到 KeyError:['demographics']['schoolyear']

标签: python pandas filter boolean


【解决方案1】:

data['demographics']['schoolyear'] == 20112012 告诉你它们是否匹配。

所以,[data['demographics']['schoolyear'] == 20112012] 会为您提供TrueFalse 的列表

所以,

data['demographics'][data['demographics']['schoolyear'] == 20112012]

在您拥有True 的地方提取data['demographics'] 的值。

即这给出了你想要的值。

【讨论】:

    【解决方案2】:

    第一个赋值应该抛出一个 ValueError: Length of values does not match length of index.

    data['demographics'] 这仅返回数据框的“人口统计”列,然后使用此 [data['demographics']['schoolyear'] == 20112012] 您正在过滤“人口统计”列,使得学年是20112012。

    语句中的错误是您试图将过滤后的数据分配给 data['demographics'],因为过滤后的数据比 data['demographics'] 的元素少。

    我建议您将过滤后的数据分配给这样的新变量。

    filteredData = data['demographics'][data['demographics']['schoolyear'] == 20112012]
    

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2019-07-20
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多