1

私たちのシステムが(何らかの理由で)データに適用するいくつかの都市名の略語の辞書があります(つまり、「カンザスシティ」は「カンザス CY」と省略され、オクラホマシティは正しいスペルです)。

関数をデータフレームの列に適用する際に問題が発生していますが、データの文字列を渡すと機能します。以下のコードサンプル:

def multiple_replace(text, dict):
  # Create a regular expression  from the dictionary keys
  regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))

  # For each match, look-up corresponding value in dictionary
  return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)

testDict = {"Kansas CY": "Kansas City"}

dfData['PREV_CITY'] = dfData['PREV_CITY'].apply(multiple_replace, dict=testDict)

その最後の行に 'axis=1' を追加すると、指定した引数が多すぎるというエラーが発生します。それ以外の場合は、エラーなしで実行され、辞書に一致する場合に変更が加えられません。

前もって感謝します!-リース

4

1 に答える 1

2

辞書を使用mapして渡すと、辞書キーに対する正確な一致を辞書値に置き換えることができます。大文字と小文字を区別する一致がある可能性があるlowerため、一致の前に最初にすべての文字列を指定します。

dfData['PREV_CITY'] = dfData['PREV_CITY'].str.lower().map(testDict, na_action='ignore')

これは、辞書のキーも小文字であると想定しています

于 2016-09-20T20:07:37.473 に答える