【问题标题】:Checking dataframe cells to see if they contain a value检查数据框单元格以查看它们是否包含值
【发布时间】:2023-03-12 19:48:01
【问题描述】:

假设我有一个相当简单的代码,例如

import pandas
df_import=pandas.read_excel("dataframe.xlsx")
df_import['Company'].str.contains('value',na=False,case=False)

所以这显然会导入 pandas,从 excel 文档创建一个数据框,然后在标题为 Company 的列中搜索某个值,并返回一个索引,说明该单元格的值是否包含该值(真或假)

但是,我想测试 3 个案例。案例 A,未找到结果(全部为 False),案例 2,仅找到 1 个案例(仅 1 个为真),案例 3,找到超过 1 个结果(True > 1)。

我的想法是我可以设置一个 for 循环,遍历列,如果一个单元格的值为 True,我将 1 添加到一个变量(我们称之为计数)。然后在最后,我有一个基于count的值的if/elif/elif语句,不管是0,1,还是>1。

现在,也许有更好的方法来检查这个,但如果没有,我认为 for 循环看起来像

for i in range (len(df_improt.index))
    if df_import.iloc[i,0].str.contains('value',na=False,case=False)
        count += 1

首先,我不确定是否应该使用 .iloc 或 .iat,但两者都会给我错误

AttributeError: 'str' 对象没有属性 'str'

我无法找到对此的更正。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您当前的代码无法运行,因为iloc[i, 0] 返回一个标量值,当然,那些没有与之关联的str 访问器方法。


    一个快速简单的解决方法是在系列级别调用sum str.contains 调用。

    count = df_import['Company'].str.contains('value', na=False, case=False).sum()
    

    现在,count 包含该列中的匹配数。

    【讨论】:

    • 事实上,这确实回答了根本问题。只是好奇,如果我想使用 for 循环,我将如何正确地做到这一点。或者有没有更好的方法来判断特定单元格是否包含搜索值。如果在评论中回答太复杂,那很好
    • @jon 哦,对不起,忘了解决这个问题。现在添加它,但是是的。始终尽量避免迭代。
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2014-09-04
    • 2020-11-16
    • 2018-10-26
    • 2021-10-18
    • 2022-11-03
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多