我有一个数据框
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())
答案 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