「accredited」という列のあるpythonデータフレームがあります。この列には、「10/10/2011」という認定のデータが含まれている必要があります。または「Notaccredited」と入力します。ただし、認定されていない場合、ほとんどの場合、列にはいくつかのデータがあります。 「このビジネスは認定されていません.....」のようなテキストテキスト全体を置き換えて、「認定されていません」と入力します。
今、私は関数を書きました:
def notAcredited(string):
if ('Not' in string or 'not' in string):
return 'Not Accredited'
ループで関数を実装していますが、「。apply」メソッドでこれを行うことは可能ですか?
for i in range(len(df_1000_1500)):
accreditacion = notAcredited(df_1000_1500['BBBAccreditation'][i])
if accreditacion == 'Not Accredited':
df_1000_1500['BBBAccreditation'][i] = accreditacion
ベクトル化された文字列メソッドを使用できますSeries.str.replace
:
In [72]: df = pd.DataFrame({'accredited': ['10/10/2011', 'is not accredited']})
In [73]: df
Out[73]:
accredited
0 10/10/2011
1 is not accredited
In [74]: df['accredited'] = df['accredited'].str.replace(r'(?i).*not.*', 'not accredited')
In [75]: df
Out[75]:
accredited
0 10/10/2011
1 not accredited
replace
たとえばr'(?i).*not.*'
、に渡される最初の引数は、任意の正規表現パターンにすることができます。2番目は、任意の正規表現置換値にすることができます。これは、で受け入れられるのと同じ種類の文字列re.sub
です。(?i)
正規表現パターンでは、大文字と小文字を区別しないので、パターンになりnot
、Not
、NOt
、NoT
、など、すべての試合が希望を。
Series.str.replace
の呼び出しをCythonizeしますre.sub
(これにより、Pythonループを使用するためapply
、apply
使用して達成できる速度よりも高速になります)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加