Удалить целые и специальные символы из столбца - PullRequest
0 голосов
/ 15 октября 2019

Новичок в python, хотел бы удалить специальные символы и целые числа из значений столбцов. Я хочу остаться только с символами строки в столбце. Для этого случая это столбец C , который я хочу удалить специальными символами, такими как слеш и цифры, см. Таблицу

import pandas as pd 

data = {'A':['NW', 'NB', 'UK', 'CAN', 'der'],'B':['Tom', 'nick', 'krish', 'jack','mark'], 'C':['|20|Empty,', 'Yes| -1', 'Male|-1|2-female|0', 'Yes| 1', 79]} 
df = pd.DataFrame(data) 
print(df)

Теперь, если строка содержит только целое число в столбце C, яследует удалить его, я пробовал это, который не работает хорошо

df['C'].map(lambda x: re.sub(r'\-,+', '', x))

ОЖИДАЕМЫЙ ВЫХОД

import pandas as pd 

data = {'A':['NW', 'NB', 'UK', 'CAN'],'B':['Tom', 'nick', 'krish', 'jack'], 'C':['Empty', 'Yes', 'Male female', 'Yes']} 
df = pd.DataFrame(data) 
print(df)

Ответы [ 4 ]

1 голос
/ 15 октября 2019

Попробуйте, используя .apply

>>> df['C'].apply(lambda x: re.sub(r'[^a-zA-Z ]+', ' ', str(x)))
0         Empty
1          Yes 
2    Male female
3          Yes 
4              
Name: C, dtype: object
1 голос
/ 15 октября 2019

Вы можете использовать str.replace + str.strip и, наконец, dropna :

df['C'] = df.C.str.replace('(?i)[^a-z]', ' ').str.replace('\s+', ' ').str.strip()
print(df.dropna())

Выход

     A      B            C
0   NW    Tom        Empty
1   NB   nick          Yes
2   UK  krish  Male female
3  CAN   jack          Yes
1 голос
/ 15 октября 2019

Использование str.replace

Пример:

data = {'A':['NW', 'NB', 'UK', 'CAN', 'der'],'B':['Tom', 'nick', 'krish', 'jack','mark'], 'C':['|20|Empty,', 'Yes| -1', 'Male|-1|2-female|0', 'Yes| 1', 79]} 
df = pd.DataFrame(data)
df["C"] = df["C"].str.replace(r"[^a-zA-Z]+", " ", regex=True).str.strip() 
print(df)

Выход:

     A      B            C
0   NW    Tom        Empty
1   NB   nick          Yes
2   UK  krish  Male female
3  CAN   jack          Yes
4  der   mark          NaN
0 голосов
/ 15 октября 2019

Приведенный ниже код должен работать, но не может быть оптимальным способом сделать это.

df["C"].str.replace("[0-9]","").str.replace("|"," ").str.replace(",","").str.replace("-","").dropna()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...