Удаление не алфавитно-цифровых символов в кадре данных - PullRequest
0 голосов
/ 27 сентября 2018

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

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's first

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

creative 3
smart tech pte ltd
nutritive asia
asia s first

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Используйте 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's first"],
                   'col2':range(4)})
print (df)
                    col  col2
0            creative-3     0
1  smart tech pte. ltd.     1
2        nutritive asia     2
3          asia's 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 голосов
/ 27 сентября 2018

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

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...