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