【问题标题】:Python Pandas Dataframe filter not workingPython Pandas Dataframe 过滤器不起作用
【发布时间】:2021-06-15 11:04:49
【问题描述】:

我有一个名为 df 的 Pandas 数据框,其内容如下:

    Symbol                     Cat         Beta Eps MktCap
2350    FBP  Foreign Regional Banks            0   0      0
2351   FNBC  Foreign Regional Banks            0   0      0
2353   BSBR  Foreign Regional Banks            0   0      0
2354    BBD  Foreign Regional Banks            0   0      0
2355    HDB  Foreign Regional Banks            0   0      0
2356    BCH  Foreign Regional Banks            0   0      0
2358     WF  Foreign Regional Banks            0   0   None
2359   SMFG  Foreign Regional Banks            0   0   None
2360    BFR  Foreign Regional Banks            0   0      0
2361    BCA  Foreign Regional Banks            0   0      0
2362   BPOP  Foreign Regional Banks            0   0   None
2363    CIB  Foreign Regional Banks            0   0      0
2364   ITUB  Foreign Regional Banks            0   0      0
2365    BMA  Foreign Regional Banks            0   0      0
2366     KB  Foreign Regional Banks            0   0   None
2367   BBDO  Foreign Regional Banks            0   0      0
2368   BSMX  Foreign Regional Banks            0   0   None
2369   BBVA  Foreign Regional Banks            0   0   None
2370    SHG  Foreign Regional Banks            0   0      0
2352     DB  Foreign Regional Banks         1.08   0      0
2357    MFG  Foreign Regional Banks  6.101694915   0   None

我使用以下 Python 代码:

df2 = df[df.Beta > 0]

生成的 df2 不会过滤掉 Beta 的 0 值,这意味着它保持等于 df。我该如何解决? 谢谢

【问题讨论】:

  • 它确实对我有用。 Beta 的数据类型是什么?当我使用read_clipboard() 读取您的数据框时,该列被分配float 格式并且它可以正常工作。

标签: python pandas dataframe


【解决方案1】:

我认为您可以尝试通过astype 转换为float - 似乎Beta 列的dtypeobject(那么type 显然是string):

df2 = df[df.Beta.astype(float) > 0]

【讨论】:

  • 我可能会转换为 int - 比较的浮点数充其量是不确定的。特别是如果某些值接近零或者是计算的结果
  • @ChristianSauer - 如果使用=>=< 更改条件,则会得到不正确的输出 - 因为print (int(6.9)) 返回6
  • @BryanDowning - 很高兴能为您提供帮助!
  • @jezrael 舍入问题是我提出建议的原因。或者,如果我没记错的话,你可以使用一个函数来考虑领带可接受的差异,numpy.isclose
  • @BryanDowning 当然,但我认为 numpy.isclose 更适合与浮点标量值进行比较,或者不是?我认为强制转换为 int 可能会返回错误的输出 - df[df.Beta.astype(int) == 1] 返回行与 Beta = 1.08。你能解释更多吗?
【解决方案2】:

我有一个看起来像这样的 pandas df:pandas df

我的问题是,当我尝试使用过滤器或条件来查找某个状态时,我发现该状态不存在,即使我可以看到它确实存在。

例如

state_df.loc[state_df['state'] == 'AK']

导致 df 没有行,这意味着它找不到 AK。

我认为这个问题可能与列的 dtype 有关,但对我来说也很好:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 44 entries, 0 to 43
Data columns (total 6 columns):
state                     44 non-null object
high_risk_per_ICU_bed     44 non-null float64
high_risk_per_hospital    44 non-null float64
icu_beds                  44 non-null float64
hospitals                 44 non-null float64
total_at_risk             44 non-null float64
dtypes: float64(5), object(1)
memory usage: 2.2+ KB

如果有帮助,我通过使用groupby 函数并与sum 聚合创建了列state,但我认为这不会导致此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2019-05-22
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多