【问题标题】:Looping through rows in a Pandas dateframe to check values in two separate columns循环遍历 Pandas 数据框中的行以检查两个单独列中的值
【发布时间】:2017-11-30 18:46:06
【问题描述】:

假设我有一个包含 6 列和 4 行的数据框,以及一个单独的列表,我们称之为 boollist。我想要做的是遍历所有行,然后如果行中的 2 个单元格包含空白字符串,我会将“False”附加到 boollist。反之亦然,如果该行包含少于 2 个空白字符串单元格,它将附加一个“True”。在进程结束时,boollist 的长度应与行数相同,以便可以将其添加为新列。

         column0    column1    column2    column3    column4    column5
row0     'data'     'data'      'data'    'data'      'data'     'data'
row1     'data'       ''        'data'    'data'      'data'     'data'
row2       ''         ''         ''          ''       'data'       ''
row3     'data'      'data'     'data'     'data'     'data'     'data'

在这个例子中,boollist 最终应该包含 [True,True,False,True]。

提前感谢您的帮助。

【问题讨论】:

    标签: python python-2.7 python-3.x pandas dataframe


    【解决方案1】:

    空白在bool 上下文中解析为False

    (~df.astype(bool)).sum(1) < 2
    

    更明确

    df.eq('').sum(1) < 2
    

    【讨论】:

      【解决方案2】:

      pandas 的优点是你不需要循环任何东西。

      如果您不想编辑数据以将字符串计数为 null,那么您可以使用 applymap 来检查您的数据。

      applymap 通过您的数据框逐元素应用函数。在 applymap 中,您可以使用 lambda function 如果单元格有一个空字符串,它将返回 True。然后对行中的空字符串求和。

      df.applymap(lambda x: x =='').sum() <2
      

      以少于两个空字符串的行为条件返回一个布尔数组。

      【讨论】:

      • 我并不想放弃任何东西。我只想检查行,然后附加到单独的列表中。我也没有任何 NaN,它们是空字符串。
      • .isnull 不适用于空字符串作为空值。还有一种方法可以让它返回一个带有 1 和 0 的 int 列表,或者一个带有“yes”或“no”的字符串列表吗?布尔数组更多地意味着跟踪结果的任意方式,我很抱歉不清楚。
      • 可以将空字符串转为空值再使用代码,
      • 是的,但我希望找到一种不涉及更改实际数据的技术,因为空白字符串在我的数据集中意味着某些东西。我知道我可以再去更换它们,但我希望找到更有效的策略。
      猜你喜欢
      • 2022-08-18
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多