Как применить мою функцию к столбцу DataFrame? - PullRequest
0 голосов
/ 29 апреля 2019

Я определил следующую функцию:

def clearString(myString):
    forbidden = r'/\:*?"<>|'
    for character in forbidden:
        if character in myString:
           myString = myString.replace(character,'')
    return myString

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

Я уже попробовал функцию apply, как в отдельном столбце, так и во всем DataFrame, и ничего из этого не дает положительного результата, будь то присвоение DataFrame себе, как в:

df = df.apply(clearString)
#Or even
df = clearString(df)

Или даже определение нового:

df_new = df.apply(clearString)
#Or even
df_new = clearString(df)

Возможно, что-то не так с моей функцией, например, неправильная обработка DataFrames или что-то в этом роде?

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

apply не работает, потому что по умолчанию применяет данную функцию к каждому столбцу (а не к каждому элементу).В приведенных примерах clearString получит аргумент Series, а не str.

. Чтобы применить функцию ко всем элементам DataFrame, можно использоватьapplymap метод ( документы ).

Примеры:

# if you wanna replace the old dataframe
df = df.applymap(clearString)

# if you wanna keep the old dataframe
new_df = df.applymap(clearString)
0 голосов
/ 29 апреля 2019

Если вы хотите изменить один столбец, вы можете попробовать следующие подходы:

df = pd.DataFrame({"Title": ["one ", "two", "three", "four"]})
def clean(title):
    return title.upper()
df["Title"] = df["Title"].apply(lambda x: clean(x))
# OR 
df["Modified_Title"] = df["Title"].apply(lambda x: clean(x))
# OR 
df["Modified_Title1"] = df.apply(lambda x: clean(x["Title"]), axis=1)
# OR 
new_df = df.applymap(lambda x: clean(x)) 
0 голосов
/ 29 апреля 2019

Вы можете использовать карту или даже применить и карту вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...