簡體   English   中英

從python中的正則表達式數組輸出中提取非空值

[英]Extract non- empty values from the regex array output in python

我有一個numpy.ndarray類型的列,看起來像:

         col
    ['','','5','']
    ['','8']
    ['6','','']
    ['7']
    []
    ['5']

我想要這樣的輸出:

         col
          5
          8
          6
          7
          0
          5

我該如何在python中做到這一點。

要將數據轉換為數值,可以使用:

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之前的熊貓版本,可以改用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)

我把這個留給你:

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

下一步將是遍歷數組的行並實現這兩個想法之一。

有人在這里顯示了如何完成此操作: 遍歷Numpy矩陣行以分別應用一個函數?

編輯:也許這是不贊成的,但我故意這樣做是為了不給出最終代碼。

     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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM