2017-08-04 121 views
0

我试图删除数据中的所有重音符号。我发现了一个函数,但是我无法一次在整个数据框上应用相同的功能。如何将自变量的函数应用于熊猫数据框

import unicodedata 
import pandas as pd 

def remove_accents(input_str): 
    nfkd_form = unicodedata.normalize('NFKD', input_str) 
    only_ascii = nfkd_form.encode('ASCII', 'ignore') 
    return only_ascii 


data = {'name': ['Guzmán', 'Molly'], 
     'year': [2012, 2012]} 
df = pd.DataFrame(data) 
df 

如何应用上述功能?

pandas read_csv有什么参数可以用来实现类似的输出吗?

+0

你看过'apply'的任何例子吗?你的情况看起来非常狭隘。我完全不了解你最后的问题。 – DyZ

+0

尝试使用['apply' docs](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) –

+0

给出的错误为'unicodedata.normalize('NFKD',input_str )'''''''''' – learner

回答

1

正如其他人所指出的,这是非常简单的:

df['name'] = df['name'].apply(remove_accents) 

此外,如果你正在使用Python 3,我建议改变你remove_accents函数的最后一行。 only_ascii正在返回二进制数据,通常最好将unicode文本保持为常规(Python 3)str

def remove_accents(input_str): 
    nfkd_form = unicodedata.normalize('NFKD', input_str) 
    only_ascii = nfkd_form.encode('ASCII', 'ignore') 
    return only_ascii.decode('utf-8') 
+0

@Thanks。有没有办法可以在整个数据框上应用该功能,而不是一次一列? – learner

+0

你可以遍历列或尝试类似:'df.apply(lambda x:[remove_accents(i)for i in x])''。可能效率不高,但可以完成工作。 –

+0

顺便说一句,“调试”“应用”并理解你的函数作为输入的一种好方法是传递一个函数,它只是简单地打印它接收到的输入:'lambda x:print(x)'。可能只有Python 3。 –

相关问题