Как зациклить .replace над столбцом, чтобы заменить несколько строк на одну строку? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть столбец в кадре данных, в котором я пытаюсь исправить все орфографические ошибки / ошибки ввода в правильной строке (например, от femake до female). Есть ли способ перечислить все орфографические ошибки в одной строке кода, чтобы изменить их все на правильную переменную. У меня есть следующий код. Если бы цикл мог работать, как бы я создал цикл?

mh2014['Gender'] = mh2014['Gender'].replace('f' and 'woman' and 'femail' and 'cis-female/femme' and 'female (cis)' and 'cis female' and 'femake', 'female')

Ответы [ 3 ]

4 голосов
/ 11 ноября 2019

Предполагая, что вы используете DataFrame Pandas, вы можете просто переназначить столбец для понимания списка, в котором вы проверяете наличие орфографических ошибок следующим образом:

misspellings = {'f', 'woman','femail','cis-female/femme','female (cis)','cis female','femake'}
mh2014['Gender'] = ["female" if entry in misspellings else entry for entry in mh2014['Gender']]

Мы используемустановлен для ускорения поиска орфографических ошибок, потому что он имеет O (1) среднее время поиска .

Если вы хотите добавить больше орфографических ошибок, чтобы поймать, измените список орфографических ошибок, возможно, загружая его изфайл, если список становится громоздким для жесткого кода.

0 голосов
/ 11 ноября 2019

Поскольку вы использовали фрейм слова данных в своем вопросе, я ожидаю, что оно будет в пандах.

import pandas as pd
df = pd.read_excel('loation/to/myfile')
misspelled = set('f', 'woman', 'femail', 'cis-female/femme', 'female (cis)', 'cis female', 'femake')
df['Gender'] = df['Gender'].str.replace(misspelled, 'female')
0 голосов
/ 11 ноября 2019

Вам просто нужно перебрать строки, которые вы хотите заменить:

misspellings = ['f', 'woman', 'femail', 'cis-female/femme', 'female (cis)', 'cis female', 'femake']
for s in misspellings:
    mh2014['Gender'] = mh2014['Gender'].replace(s, 'female')

and не делает то, что вы думаете, что делает. Из Python Tutorial :

Булевы операторы and и or являются так называемыми операторами короткого замыкания : их аргументы оцениваются изслева направо, и оценка останавливается, как только определяется результат. Например, если A и C - истина, а B - ложь, A and B and C не оценивает выражение C. При использовании в качестве общего значения, а не в качестве логического значения, возвращаемое значение оператора короткого замыкания является последним оцененным аргументом.

Например:

>>> 'x' and 'y'  # 'x' is true so try next expression
'y'
>>> '' and 'y'  # '' is false so don't try next expression
''
>>> 'x' and ''  # Same as the first
''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...