【问题标题】:Getting an error when converting to float to get top 10 largest values转换为浮点数以获取前 10 个最大值时出错
【发布时间】:2021-02-15 13:32:12
【问题描述】:

我正在尝试使用 nlargest 函数使用以下代码返回前 10 个值,

df['roi'].astype(float).nlargest(3, 'roi')

但是得到一个错误

ValueError: keep must be either "first", "last" or "all"

roi 列是一个对象,这就是为什么我使用 astype float 但仍然出现错误

当我在 nlargest 函数中尝试 keep = all 或 keep = first 或 last 过滤器时,我收到错误 TypeError: nlargest() got multiple values for argument 'keep'

谢谢!

【问题讨论】:

  • 你试过docs吗? roi 不是有效选项。
  • 是的,当我尝试 keep = all 或 keep = 第一个或最后一个参数时,我收到 TypeError 错误:nlargest() got multiple values for argument 'keep'
  • 当您选择单个列 df['roi'] 时,您会得到一个系列并且您想使用 Series.nlargest

标签: python python-3.x pandas data-science


【解决方案1】:

要根据需要使用该方法,您必须将代码更改为:

df.astype(float).nlargest(3, 'roi')

由于此语法仅适用于pandas.DataFrames。如果你想通过它的键指定列,就像在字典中一样,那么你将使用pandas.Series,正确的语法是

df['roi'].astype(float).nlargest(3)

这两种方法的文档是here,用于DataFrames,here,用于Series

【讨论】:

  • 谢谢,答案给了我一个 roi 列的系列输出,无论如何我可以获得整个 df 的 df 而不是 df 中的其他列?
  • 您可以先修复列df['roi'] = df['roi'].astype(float),然后再执行df.nlargest(3, 'roi')。
  • @Chris90 我不明白。您想将nlargest 应用于'roi' 列并获得一个数据框,还是要将nlargest 应用于您的整个数据框?
  • @Ralubrusto 嗨,我想将 nlargest 应用于我的 df,但也希望输出也是 df
  • 啊,所以你只需要使用第一个命令。 df.astype(float).nlargest(3, 'roi')
【解决方案2】:

对于单线,您需要先将“roi”转换为浮点类型,然后执行nlargest:

将字典传递给.astype 允许我们返回整个DataFrame,对特定列的dtypes 进行选择性更改,然后我们可以对返回的DataFrame 执行.nlargest(而不仅仅是Series) .

df.astype({"roi": float}).nlargest(3, columns="roi")

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多