【问题标题】:Extract non- empty values from columns of a dataframe in python从python中数据框的列中提取非空值
【发布时间】:2016-09-04 01:33:10
【问题描述】:

这是这个问题的后续:Extract non- empty values from the regex array output in python

我有一个“numpy.ndarray”类型的列“col”和“col1”的DF,看起来像:

       col                         col1
   [[5, , , ,]]             [qwe,ret,der,po]
   [[, 4, , ,][, , 5, ]]       [fgk,hfrt]
        []                           []
   [[, , , 9]]                  [test]  

我希望我的输出为:

      col  col1
       5  qwe,ret,der,po
       5  fgk,hfrt
       0  NOT FOUND 
       9  test

请注意列“col”,第二行在输出中最多包含两个条目。 我尝试了上面链接中提供的解决方案,但它给出了 ValueError “具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”

谢谢

编辑: 我的 DF 的字典形式,列“col”:

  {'col': {0: array([['5', '', '', '', '', '']],
  dtype='|S1'), 1: array([], dtype=float64), 2: array([], dtype=float64), 3: array([], dtype=float64), 4: array([], dtype=float64), 5: array([['8', '', '', '', '', '']],
  dtype='|S1'), 6: array([], dtype=float64), 7: array([], dtype=float64), 8: array([], dtype=float64), 9: array([], dtype=float64), 10: array([], dtype=float64), 11: array([['', '8', '', '', '', '']],
  dtype='|S1'), 12: array([], dtype=float64), 13: array([], dtype=float64), 14: array([], dtype=float64), 15: array([['7', '', '', '', '', '']],
  dtype='|S1'), 16: array([], dtype=float64)}}

【问题讨论】:

    标签: python regex numpy pandas


    【解决方案1】:

    尝试以下方法:

    import pandas as pd
    
    
    def parse_nested_max(xss):
        return max(
            (max((int(x) for x in xs if x), default=0) for xs in xss),
            default=0
        )
    
    
    df['col'] = df.col.apply(parse_nested_max)
    df['col1'] = df.col1.apply(lambda s: ','.join(s) or 'NOT FOUND')
    

    假设第一列是字符串类型的二维数组,第二列是字符串类型的一维数组。

    对于第一列,执行以下操作:

    1. 对于每个子数组,删除 '' 元素并将其余元素转换为 int
    2. 对于每个子数组,使用 max([]) == 0 的约定计算 max
    3. 最后,这给出了一个整数列表,所以只需取最大值即可;使用default=0 来说明可能出现空虚的情况,例如df 的第三行。

    对于第二列,利用bool(','.join([])) == False这一事实。

    最后一个提示:如果您的数据框易于重新创建,您将获得更好的反馈。尝试使用 df.to_dict() 并在定义 df 时将输出嵌入到源中。

    【讨论】:

    • 我在定义“parse_nested_max”函数时遇到错误:“SyntaxError: Generator expression must be parenthesized if not only argument”。
    • 在 df 上应用 parse_nested_max 函数时出错:“TypeError: max() got an unexpected keyword argument”。我已编辑问题以包含 df 的字典形式。还有必要假设字符串类型的二维数组吗?谢谢
    • 看来max 在 Python 2 中没有默认参数,我认为这就是您使用的?此外,从上面的 dict 创建数据框会产生 16 行而不是 4 行。
    • 是的,我正在使用 python 2。这是我实际的 DF。有没有办法在 python 2 中解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多