Python 如何从数据帧中删除非字符?蟒蛇靓汤
我有一个数据帧 df 如何解析此数据帧中的非字符 我试过了,但没用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())
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:很高兴能在这里提供帮助。