【问题标题】:Pandas_select rows from a dataframe based on column valuesPandas_select 根据列值从数据框中选择行
【发布时间】:2021-07-23 16:27:03
【问题描述】:

我是 Python 新手。我有一个如下所示的数据框。这是一个 CSV 文件。我需要选择所有包含频率值 0.8 和 0.6 的行。我写了如图所示的代码,但它抛出了一个错误。

df_new = df[df['Frequency'] == 0.8 & df['Frequency'] == 1.6]

下面是我收到的错误的最后一行。

"TypeError: 无法使用 dtyped [float64] 数组和 [bool] 类型的标量执行 'rand_'"

我运行了下面的代码

df_new = df[(df['Frequency'] == 0.8) & (df['Frequency'] == 1.6) ]

没有显示任何错误但没有出现值。它只显示列的名称。请查看 bwloe 图像

【问题讨论】:

  • 试试,df[(df['Frequency'] == 0.8) & (df['Frequency'] == 1.6)]

标签: python pandas


【解决方案1】:

由于&==的优先级,需要加括号

df_new = df[(df['Frequency'] == 0.8) & (df['Frequency'] == 1.6) ]

【讨论】:

  • 我运行这段代码。它没有显示任何错误。但是 o/p 不合适。列名来了,但内容不来。我更新了我的问题,请看。
【解决方案2】:

在条件周围添加圆括号

df_new = df[ (df['Frequency'] == 0.8) & (df['Frequency'] == 1.6) ]

【讨论】:

  • 我运行此代码。它没有显示任何错误。但是 o/p 不合适。列名来了,但内容不来。我更新了我的问题,请看。
  • 使用 OR 代替 AND
【解决方案3】:

你想要这个吗?

df_new = df[df['Frequency'].isin([0.8,1.6])] 

【讨论】:

    【解决方案4】:

    您正在使用 & 这就是为什么您会得到一个空的数据框。 频率不能同时为 0.8 和 0.6。请改用 |

    试试这个:

    df = df[(df['Frequency'] == 0.8) | (df['Frequency'] == 0.6)]
    

    df = df[df["Frequency"].isin([0.6,0.8])]
    

    【讨论】:

    • 如果您不介意,请告诉我“isin”是什么意思?
    • isin() 会将值与您提供的值列表匹配。假设您想将频率与 0.6、0.8、1、2、3.. 进行比较。所以编写单个条件将是一团糟。您可以简单地将所有值提供给列表并使用 isin()
    【解决方案5】:

    它没有显示答案原因和条件不匹配。 使用OR 而不是AND

    df_new = df[ (df['Frequency'] == 0.8) | (df['Frequency'] == 1.6) ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多