2017-08-23 7 views
0

Ich bin relativ neu in Python. Ich habe eine Spalte mit Daten mit Zahlen und Text z.B.Extract Vektor von Zahlen aus einem String-Vektor

import pandas as pd 
mycolumn=pd.Series(["I w0n 1200$ in poker and got 1050$ on my b111rthday", 
         "another month was b4d, I only earned 150$", 
         "d4d gave 2200, lost 0420$ in poker in 10570 Berlin"]) 

Ich möchte alle Werte nehmen über 1000, so dass:

result=pd.Series([[1200,1050],[],[2200,10570]]) 

Das Ergebnis muss nicht Pandas Serie sein. Irgendein anderes Format, in dem ich später leere Zellen oder etw verwenden kann, um den Rest meiner Daten zu unterteilen, reicht aus.

Antwort

3

Verwenden str.findall mit (\d{4,}), wo 4 atleast 4 Positionen bedeutet, dh> 1000

In [876]: mycolumn.str.findall('(\d{4,})') 
Out[876]: 
0   [1200, 1050] 
1      [] 
2 [2200, 0420, 56454] 
dtype: object 

Und wie pointed, wenn Sie Zahlen nicht mit 0

Einsatz beginnen wollen
In [877]: mycolumn.str.findall('([1-9]\d{3,})') 
Out[877]: 
0  [1200, 1050] 
1    [] 
2 [2200, 56454] 
dtype: object 

Einzelheiten

In [878]: mycolumn 
Out[878]: 
0 I w0n 1200$ in poker and got 1050$ on my b111r... 
1   another month was b4d, I only earned 150$ 
2  d4d gave 2200, lost 0420$ with 56454 in poker 
dtype: object 
+0

'\ d {4, } aber ja. –

+0

Dies entspricht z. B. "0999", obwohl dies möglicherweise kein erwarteter Wert ist. –

+0

Sie können sich an die Regex halten und '[1-9] \ d {3,}' machen, glaube ich. –

Verwandte Themen