Как удалить не-алфавит из значений в кадре данных? Мне удалось преобразовать все в нижний регистр
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
Используйте только 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
Почему не только ниже, (я сделал более низкий битва):
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()
list4['name']=list4['name'].astype(str).str.replace('[^a-zA-Z0-9]', '').str.lower()
Series
илиDataFrame
?