有条件地替换熊猫中的缺失值

时间:2018-11-05 15:12:40

标签: python python-3.x python-2.7 pandas dataframe

我是Python的新手,正在学习一些东西。

我有一个用字符串编码的数据集。列表包含列表中所有列的名称。

columns = ['median', 'p25th', 'p75th']

在此数据集中,数字以字符串形式存储。有些列没有数字,并以 UN 表示,如下所示:

['110000''75000''73000''70000''65000''UN''62000']

['95000''55000''50000''43000''UN''31500''48000']

['125000''90000''105000''80000''75000''102000''UN''109000']

我需要使用np.nan将 UN 替换为 NaN 。 我在下面使用了这段代码:

for column in columns:
    recent_grads.loc[column =='UN', column] = np.nan

但是我一直收到此错误:

  

回溯(最近通话最近一次):

     

文件“”,第15行,位于last_grads.loc [column =='UN',   栏] = np.nan

     

文件“”,第194行,位于设置项中       self._setitem_with_indexer(indexer,value)文件“”,第332行,在_setitem_with_indexer中       键,_ = convert_missing_indexer(idx)

     

文件“”,第2049行,在convert_missing_indexer中       引发KeyError(“不能使用单个布尔值索引到setitem”)KeyError:'不能使用单个布尔值索引到setitem'

您能告诉我我要去哪里吗?抱歉,这听起来太基础了。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Pandas DataFrame replace,如图here

数据

d = [['median', 'p25th', 'p75th'],
     ['110000','75000','73000','70000','65000','UN','62000'],
     ['95000','55000','50000','43000','UN','31500','48000'],
     ['125000','90000','80000','75000','102000','UN','109000']
    ]
recent_grads = pd.DataFrame(zip(*d[1:]), columns=d[0])
print(recent_grads)

   median  p25th   p75th
0  110000  95000  125000
1   75000  55000   90000
2   73000  50000   80000
3   70000  43000   75000
4   65000     UN  102000
5      UN  31500      UN
6   62000  48000  109000

代码

import numpy as np
columns = ['median', 'p25th', 'p75th']
recent_grads[columns] = recent_grads[columns].replace('UN', np.nan)
print(recent_grads)

   median  p25th   p75th
0  110000  95000  125000
1   75000  55000   90000
2   73000  50000   80000
3   70000  43000   75000
4   65000    NaN  102000
5     NaN  31500     NaN
6   62000  48000  109000