如何使用熊猫从csv中删除特殊字符

时间:2019-05-14 14:54:00

标签: python pandas csv data-cleaning

当前正在清除csv文件中的数据。成功地将所有内容转换为小写,删除了停用词和标点符号等。但是需要删除特殊字符。例如,csv文件包含诸如“César”,“ disgrace”之类的内容。如果有办法替换这些字符,那就更好了,但是我可以删除它们。下面是我到目前为止的代码。

import pandas as pd
from nltk.corpus import stopwords
import string
from nltk.stem import WordNetLemmatizer

lemma = WordNetLemmatizer()

pd.read_csv('soccer.csv', encoding='utf-8')
df = pd.read_csv('soccer.csv')

df.columns = ['post_id', 'post_title', 'subreddit']
df['post_title'] = df['post_title'].str.lower().str.replace(r'[^\w\s]+', '').str.split()


stop = stopwords.words('english')

df['post_title'] = df['post_title'].apply(lambda x: [item for item in x if item not in stop])

df['post_title']= df['post_title'].apply(lambda x : [lemma.lemmatize(y) for y in x])


df.to_csv('clean_soccer.csv')

3 个答案:

答案 0 :(得分:1)

保存文件时尝试:

Function

或者简单地

df.to_csv('clean_soccer.csv', encoding='utf-8-sig')

答案 1 :(得分:0)

我不确定是否有简单的方法可以替换特殊字符,但是我知道如何删除它们。尝试使用:

df['post_title']= df['post_title'].str.replace(r'[^A-Za-z0-9]+', '')

那应该用“ Csardisgrace”代替“César”,“ disgrace”。希望这会有所帮助。

答案 2 :(得分:0)

作为其他答案的替代方法,您可以使用string.printable

import string

printable = set(string.printable)

def remove_spec_chars(in_str):
    return ''.join([c for c in in_str if c in printable])

df['post_title'].apply(remove_spec_chars)

作为参考,string.printable因机器而异,是数字的组合, ascii_letters,标点符号和空格。

对于您的示例字符串César' '‘disgrace’',此函数返回'Csardisgrace'

https://docs.python.org/3/library/string.html
How can I remove non-ASCII characters but leave periods and spaces using Python?