如何从数据框中删除非字符?蟒蛇美丽的汤

时间:2018-01-24 17:50:50

标签: python regex pandas

我有一个数据框

DF

 ID    col1
 1     The quick brown fox jumped hf_093*&
 2     fox run jump *& #7

如何解析此数据框中的非字符?

我尝试了这个,但它不起作用

posts = ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," 
",posts).split())

2 个答案:

答案 0 :(得分:2)

如果你要找的是删除包含特殊字符的字符串:

<强>正则表达式:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())

<强>输出:

                            0
0  The quick brown fox jumped 
1                fox run jump

疯狂列表理解爱好者的另一种非正则表达式解决方案:

unwanted = '!@#$%^&*()'    
df.applymap(lambda x: ' '.join([i for i in x.split() if not any(c in i for c in unwanted)]))

<强>输出:

                            0
0  The quick brown fox jumped
1                fox run jump

删除任何包含不需要的特殊字符的字符串。

答案 1 :(得分:2)

您可以使用inbuilt functions

import pandas as pd

df = pd.DataFrame({'ID': [1,2], 'col1': ['The quick brown fox jumped hf_093*&', 'fox run jump *& #7']}).set_index('ID')

df['col1'] = df['col1'].str.replace('[^\w\s]+', '')
print(df)

哪个收益

                                 col1
ID                                   
1   The quick brown fox jumped hf_093
2                     fox run jump  7

<小时/> 这将删除 not [a-zA-Z0-9_]和空格的所有内容。 如果想要更精细的控制,可以使用函数

import re
rx = re.compile(r'(?i)\b[a-z]+\b')

def remover(row):
    words = " ".join([word 
        for word in row.split()
        if rx.match(word)])
    return words

df['col1'] = df['col1'].apply(remover)
print(df)

哪会产生

                          col1
ID                            
1   The quick brown fox jumped
2                 fox run jump