Python 如何从数据帧中删除非字符?蟒蛇靓汤

Python 如何从数据帧中删除非字符?蟒蛇靓汤,python,regex,pandas,Python,Regex,Pandas,我有一个数据帧 df 如何解析此数据帧中的非字符 我试过了,但没用 posts = ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",posts).split()) 如果要查找的是删除包含特殊字符的字符串: Regex: df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())

我有一个数据帧

df

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

我试过了,但没用

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

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

Regex:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            0
0  The quick brown fox jumped
1                fox run jump
输出:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            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)]))
输出:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            0
0  The quick brown fox jumped
1                fox run jump

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

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

Regex:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            0
0  The quick brown fox jumped
1                fox run jump
输出:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            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)]))
输出:

df.applymap(lambda x: re.sub("(?:\w*[^\w ]+\w*)", "", x).strip())
                            0
0  The quick brown fox jumped 
1                fox run jump
                            0
0  The quick brown fox jumped
1                fox run jump
删除包含不需要的特殊字符的字符串。

您可以使用:

产生

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

这将删除除
[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
您可以使用:

产生

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

这将删除除
[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


您是否只想删除
*&
hf_093
?是否所有要删除的元素都以
*&
结尾?为什么要标记Beautifulsoup?数据帧中的所有元素都是字符。“非字符”是什么意思?您是否只想删除
*&
hf093
?是否所有要删除的元素都以
*&
结尾?为什么要标记Beautifulsoup?数据帧中的所有元素都是字符。“非字符”是什么意思?我如何在数据帧中做到这一点?您可以将其定义为函数并使用。@OptimuPrime实际上应该在您的案例中。请参阅我的编辑。如何在数据帧中执行此操作?您可以将其定义为函数并使用。@OptimuPrime实际上应该在您的情况下。查看我的编辑。很好,不知道pandas已经有了一个支持正则表达式的替换函数。我的代码看起来很丰富:|@Idlehands:
pandas
的确设计得非常好。@OptimusPrime:很高兴在此提供帮助。Nice,不知道pandas已经有了一个支持regex的替换函数。我的代码看起来像是满嘴的:|@Idlehands:
pandas
的确设计得非常好。@OptimusPrime:很高兴能在这里提供帮助。