Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于表中的字符串将列替换为NaN_Python_Pandas_Python Applymap - Fatal编程技术网

Python 基于表中的字符串将列替换为NaN

Python 基于表中的字符串将列替换为NaN,python,pandas,python-applymap,Python,Pandas,Python Applymap,我有下面的数据框 ipdb> csv_data country_edited sale_edited date_edited transformation_edited 0 India 403171 20090101 10 1 Bhutan 394096 20090101 20 2 Nepal Set Null

我有下面的数据框

ipdb> csv_data
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal    Set Null     20090101                     30
3         madhya      355883     20090101                     40
4          sudan    Set Null     20090101                     50
我想将所有包含
Set Null
的列值替换为
Nan
,因此我在下面进行了讨论

import numpy

def set_NaN(element):
    if element == 'Set Null':
        return numpy.nan
    else:
        return element

csv_data = csv_data.applymap(lambda element: set_NaN(element))
但它不会改变任何事情

ipdb> print csv_data
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal    Set Null     20090101                     30
3         madhya      355883     20090101                     40
4          sudan    Set Null     20090101                     50
ipdb>
但是当我只打印
csv\u data.applymap(lambda元素:set\u NaN(元素))
如下时,我可以看到输出,但当分配回时,我无法获得我想要的数据

ipdb> csv_data.applymap(lambda element: set_NaN(element))
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal         NaN     20090101                     30
3         madhya      355883     20090101                     40
4          sudan         NaN     20090101                     50
那么如何根据特定字符串将列值替换为NaN?

您需要,它将掩码的值替换为
True
NaN。还有一些列是数字列,因此需要先将
df
的值转换为
string

print (csv_data.astype(str) == 'Set Null')
  country_edited sale_edited date_edited transformation_edited
0          False       False       False                 False
1          False       False       False                 False
2          False        True       False                 False
3          False       False       False                 False
4          False        True       False                 False


csv_data = csv_data.mask(csv_data.astype(str) == 'Set Null')
print (csv_data)
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal         NaN     20090101                     30
3         madhya      355883     20090101                     40
4          sudan         NaN     20090101                     50
另一个带有
numpy布尔掩码的解决方案
-通过以下方式比较numpy数组:

在您的解决方案中,有必要将数据分配回
csv\u数据

def set_NaN(element):
    if element == 'Set Null':
        return numpy.nan
    else:
        return element

csv_data = csv_data.applymap(lambda element: set_NaN(element))
print (csv_data)
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal         NaN     20090101                     30
3         madhya      355883     20090101                     40
4          sudan         NaN     20090101                     50

这里有什么信息吗:
csv\u data=csv\u data.applymap(set\u NaN)
。另外,
applymap
接受一个callable,因此这里不需要额外的
lambda
。好吧,我不知道,我是新来的熊猫
def set_NaN(element):
    if element == 'Set Null':
        return numpy.nan
    else:
        return element

csv_data = csv_data.applymap(lambda element: set_NaN(element))
print (csv_data)
  country_edited sale_edited  date_edited  transformation_edited
0          India      403171     20090101                     10
1         Bhutan      394096     20090101                     20
2          Nepal         NaN     20090101                     30
3         madhya      355883     20090101                     40
4          sudan         NaN     20090101                     50