2016-08-17 9 views
1

私は次の関数を実行していますが、何らかの理由でそれが長さ条件(if部分)を考慮するのに苦労しています。それは何らかの形でのみ何らかの理由でx.str.replace(r'[^0-9]', '')一部を実行しますlambdaのPython pandasは難しいです

stringDataFrame.apply(lambda x: x.str.replace(r'[^0-9]', '') if (len(x) >= 7) else x)

、私は私が立ち往生してきたここで間違って何をやっている:それは単に機能だけあれば最初の部分を実行します。

+0

はあなたの問題を示している例を提供することはできますか? – IanS

+1

xは系列であり、len(x)はその系列の長さである。個々の弦の長さをチェックしますか? – ayhan

答えて

1

applyは(Series)と連動しているため、それぞれの値を個別に処理する必要がある場合はapplymapを使用できます。その後

代わりstr.replaceを使用しての、regexsのためのよりよい作品re.subを使用します。

print (stringDataFrame.applymap(lambda x: re.sub(r'[^0-9]', '', x) if (len(x) >= 7) else x)) 

サンプル:

import pandas as pd 
import re 

stringDataFrame = pd.DataFrame({'A':['gdgdg454dgd','147ooo2', '123ss45678'], 
           'B':['gdgdg454dgd','x142', '12345678a'], 
           'C':['gdgdg454dgd','xx142', '12567dd8']}) 

print (stringDataFrame) 
      A   B   C 
0 gdgdg454dgd gdgdg454dgd gdgdg454dgd 
1  147ooo2   x142  xx142 
2 123ss45678 12345678a  12567dd8 

print (stringDataFrame.applymap(lambda x: re.sub(r'[^0-9]', '', x) if (len(x) >= 7) else x)) 
      A   B  C 
0  454  454  454 
1  1472  x142 xx142 
2 12345678 12345678 125678 
+0

@jezraelありがとうございます。私はapplymapを試してみましたが、問題は 'str.replace'を使ってみたようです。 – Jeff

+0

この質問にも入る簡単なものです。私はラムダと機能に関しては恐ろしいです。しかし、私は追加の 'x.contains(" tel | cel | cell "、case = False)を追加することによって2つの条件を得たいと思っています。これは式が次のようになることを意味します:stringDataFrame.applymap(len(x)> = 7)< re.sub(R '[^:(x.contains( "TEL | |セル画セル"、ケース=偽)))他のx) '@jezrael – Jeff

+0

あなたは無地のpythonを必要とする、'プリント(stringDataFrame.applymap(ラムダX試します['cel'、 'tel'、 'cell']内のextの場合はx、y、y、他のx)) ' – jezrael

関連する問題