Удаление не алфавитно-цифровых символов в кадре данных

1

Как удалить не-алфавит из значений в кадре данных? Мне удалось преобразовать все в нижний регистр

def doubleAwardList(self):
        dfwinList = pd.DataFrame()
        dfloseList = pd.DataFrame()
        dfwonandLost = pd.DataFrame()
        #self.dfWIN... and self.dfLOSE... is just the function used to call the files chosen by user
        groupby_name= self.dfWIN.groupby("name")
        groupby_nameList= self.dfLOSE.groupby("name _List")

        list4 = []
        list5 = []

        notAwarded = "na"

        for x, group in groupby_name:
            if x != notAwarded:
                list4.append(str.lower(str(x)))
        dfwinList= pd.DataFrame(list4)

        for x, group in groupby_nameList:
            list5.append(str.lower(str(x)))
        dfloseList = pd.DataFrame(list5)

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

creative-3
smart tech pte. ltd.
nutritive asia
asia first

желаемый результат:

creative 3
smart tech pte ltd
nutritive asia
asia s first
  • 1
    Можете ли вы добавить образец данных?
  • 0
    Это Series или DataFrame ?
Показать ещё 4 комментария
Теги:
pandas
dataframe
python-2.7

2 ответа

0
Лучший ответ

Используйте только DataFrame.replace и добавьте пробел в шаблон:

df = df.replace('[^a-zA-Z0-9 ]', '', regex=True)

Если одна колонка - Series:

df = pd.DataFrame({'col': ['creative-3', 'smart tech pte. ltd.', 
                           'nutritive asia', "asia first"],
                   'col2':range(4)})
print (df)
                    col  col2
0            creative-3     0
1  smart tech pte. ltd.     1
2        nutritive asia     2
3          asia first     3

df['col'] = df['col'].replace('[^a-zA-Z0-9 ]', '', regex=True)
print (df)

                  col  col2
0           creative3     0
1  smart tech pte ltd     1
2      nutritive asia     2
3         asias first     3

РЕДАКТИРОВАТЬ:

Если доступно несколько столбцов, выберите только объект, явно строковые столбцы и, если необходимо, добавьте строки:

cols = df.select_dtypes('object').columns
print (cols)
Index(['col'], dtype='object')

df[cols] = df[cols].astype(str).replace('[^a-zA-Z0-9 ]', '', regex=True)
print (df)
                  col  col2
0           creative3     0
1  smart tech pte ltd     1
2      nutritive asia     2
3         asias first     3
  • 0
    я сталкиваюсь с текущей ошибкой, хотя Ошибка типа: индексы списка должны быть целыми числами, а не
  • 0
    @nevertoolateyet - Какое решение используется?
Показать ещё 10 комментариев
0

Почему не только ниже, (я сделал более низкий битва):

df=df.replace('[^a-zA-Z0-9]', '',regex=True).str.lower()

То теперь:

print(df)

Получит желаемый кадр данных

Обновить:

пытаться:

df=df.apply(lambda x: x.str.replace('[^a-zA-Z0-9]', '').lower(),axis=0)

Если работает только один столбец:

df['your col']=df['your col'].str.replace('[^a-zA-Z0-9]', '').str.lower()
  • 0
    list4 ['name'] = list4 ['name']. str.replace ('[^ a-zA-Z0-9]', '') .str.lower () Я прав? Произошла следующая ошибка: TypeError: индексы списка должны быть целыми числами, а не str Извините, я только что изучил программирование на Python только 2 недели.
  • 0
    @nevertoolateyet Затем попробуйте: list4 list4['name']=list4['name'].astype(str).str.replace('[^a-zA-Z0-9]', '').str.lower()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню