【问题标题】:Filtering out columns based on certain criteria根据特定条件过滤掉列
【发布时间】:2019-09-20 10:13:52
【问题描述】:

我还有一个关于使用 pandas 操作数据的问题。我正在尝试根据特定标准归档列,但似乎无法获得正确的代码。

我需要根据 1000000 美元到 2000000 美元之间的“收入”以及“负债率”超过 20% 来过滤我的数据

我尝试了以下代码,但我的语法不断出现错误,或者只是一个布尔值 True 或 False 输出。

loans_df = loansdf[loans_df('Income')== range(1000000:2000000) & loans_df('Debt Ratio') > .20]

所以我的预期结果是基于这些过滤器显示 df 的视觉效果,并且我不断收到错误或 True 或 False 输出!

【问题讨论】:

  • 您需要在每个布尔值周围添加“(”和“)”,所以它是loans_df = loansdf[(loans_df('Income')== range(1000000:2000000)) & (loans_df('Debt Ratio') > .20)]
  • 小心范围(x:y)。不要认为它是有效的 python,range(x,y) 也不会在我认为的上下文中工作。

标签: python-3.x pandas filtering


【解决方案1】:

检查您构建布尔掩码的方式以及运算符的优先级。值得回顾一下 Python 语言以及如何使用 Pandas 制作布尔掩码。这是一个有效的解决方案,掩码在一行,因此您可以根据需要使用运算符、优先级和其他逻辑。还要检查数据框中的列被引用的方式。

import pandas as pd
import csv

from pandas.compat import StringIO

csvdata = StringIO("""
Income,Debt Ratio
5000000,.4
1000000,.4
1500000,.3
1500000,.1
""")

loans_df = pd.read_csv(csvdata, sep=",")
mask = (loans_df['Income'] > 1000000) & (loans_df['Income'] < 2000000) & (loans_df['Debt Ratio'] > .20)
print (loans_df[mask])

生产

2  1500000         0.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2021-04-21
    • 2012-12-08
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多