从python中的数据帧的列中提取非空值

时间:2016-05-09 12:05:02

标签: python regex numpy pandas

这是对此问题的跟进:Extract non- empty values from the regex array output in python

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

null

我希望输出为:

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

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

由于

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

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

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

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')

这假设第一列是字符串类型的2-dim数组,第二列是字符串类型的1-dim数组。

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

  1. 对于每个子数组,请删除''元素并将其余部分转换为int
  2. 对于每个子数组,使用max
  3. 的约定计算max([]) == 0
  4. 最后,这给出了一个整数列表,所以简单地取最大值;使用default=0来解释df第三行中空虚的可能性。
  5. 对于第二列,利用bool(','.join([])) == False

    这一事实

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