Pandas数据框用nan

时间:2018-05-29 18:49:55

标签: python pandas utf-8

我正在尝试使用pd.read_excel将大量带有数字数据的.xls和.xlsx文件读入python中。但是,文件使用em-dash表示缺失值。我试图让Python取代所有这些em-dashes作为nans。我似乎无法找到让Python识别角色的方法,更不用说替换它了。我尝试了以下无效的

df['var'].apply(lambda x: re.sub(u'\2014','',x))

我也试过了

df['var'].astype('float')

将数据框中的所有em-dash转换为nans,同时将数字数据保留为浮点数的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

您应该在较早阶段捕获错误。告诉pd.read_excel()将em-dashes视为NaN:

df = pd.read_excel(..., na_values=['–','—'])

答案 1 :(得分:1)

我认为最简单的方法是pd.to_numeric使用参数errors='coerce'

df['var'] = pd.to_numeric(df['var'], errors='coerce')

来自docs

  

如果'强制',则无效解析将设置为NaN

答案 2 :(得分:0)

df.replace({'-': None})正是您要找的。在堆栈溢出的另一篇文章中找到。

答案 3 :(得分:0)

不确定这些破折号究竟发生了什么(这些破折号出现在你的情况下,当我做df.get_value(0,' var')时),但我做了找到一个有效的解决方案,将破折号转换为nans并将数字数据保存为数字。

import unicodedata

df['var']=df['var'].map(unicode)
df['var']=df['var'].apply(lambda x: unicodedata.normalize('NFKD', x).encode('ascii','ignore'))
df['var']=pd.to_numeric(df['var'])