从python中的正则表达式数组输出中提取非空值

时间:2016-05-08 12:38:19

标签: python arrays numpy pandas dataframe

我有一个类型为numpy.ndarray的列,如下所示:

         col
          5
          8
          6
          7
          0
          5

我想要这样的输出:

 cmake_minimum_required(VERSION 3.5)
 project(TestLib)

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x")

 set(SOURCE_FILES src/Class.cpp src/Class.h)
 add_library(TestLib ${SOURCE_FILES})> 

我怎么能在python中做到这一点。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

要将数据转换为可以使用的数值:

import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5',''], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = pd.to_numeric(df['col'].str.join('')).fillna(0).astype(int)
print(df)

产量

   col
0    5
1    8
2    6
3    7
4    0
5    5

要将数据转换为字符串,请使用:

df['col'] = df['col'].str.join('').replace('', '0')

结果看起来相同,但列的dtype是object,因为值是字符串。

如果某些行中有多个数字并且您希望选择最大数字, 然后你必须遍历每一行中的每一项,将每个字符串转换为 一个数值,取最大值:

import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5','6'], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = [max([int(xi) if xi else 0 for xi in x] or [0]) for x in df['col']]
print(df)

产量

   col
0    6   # <-- note  ['','','5','6'] was converted to 6
1    8
2    6
3    7
4    0
5    5

对于0.17之前的pandas版本,您可以改为使用df.convert_objects

import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5',''], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = df['col'].str.join('').replace('', '0')
df = df.convert_objects(convert_numeric=True)

答案 1 :(得分:0)

我会告诉你:

>>> l=['', '5', '', '']
>>> l = [x for x in l if not len(x) == 0]
>>> l
>>> ['5']

你可以使用lambda和filter

做同样的事情
>>> l
['', '1', '']
>>> l = filter(lambda x: not len(x)==0, l)
>>> l
['1']

下一步是迭代数组的行并实现这两个想法中的一个。

有人在此处展示了如何完成此操作:Iterating over Numpy matrix rows to apply a function each?

编辑:也许这是低估的,但我故意这样做是为了不给出最终的代码。

答案 2 :(得分:0)

     xn = array([['', '', '5', ''], ['', '8'], ['6', '', ''], ['7'], [], ['5']],
    dtype=object)

        In [20]: for a in x:
   ....:     if len(a)==0:
   ....:         print 0
   ....:     else:
   ....:         for b in a:
   ....:             if b:
   ....:                 print b
   ....:
5
8
6
7
0
5