Python convert_对象(convert_numeric=True)不为完整系列的非数值生成np.nan
在ActiveState的Pandas v0.12(Python 2.7.2)和Anaconda的Pandas v0.14(Python 2.7.8)上进行了试验 当数据帧的列中充满无法转换为数值的值时,所有列值都不会转换为NAN。当一个或多个值可以转换为数值时,所有非数值都会正确转换为NANPython convert_对象(convert_numeric=True)不为完整系列的非数值生成np.nan,python,pandas,Python,Pandas,在ActiveState的Pandas v0.12(Python 2.7.2)和Anaconda的Pandas v0.14(Python 2.7.8)上进行了试验 当数据帧的列中充满无法转换为数值的值时,所有列值都不会转换为NAN。当一个或多个值可以转换为数值时,所有非数值都会正确转换为NAN import pandas as pd pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","c"]}).convert_objects(convert_num
import pandas as pd
pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","c"]}).convert_objects(convert_numeric=True)
c1 c2
0 1 a
1 2 b
2 3 c
pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","4"]}).convert_objects(convert_numeric=True)
c1 c2
0 1 NaN
1 2 NaN
2 3 4
我正在读取用户提供的数据,因此我将转换为数值,然后适当地处理NAN值
防止这种情况发生的唯一方法是添加一个满是浮点数(0.0)的虚拟行,执行转换,然后删除该行
我不能使用“.astype(float)”,因为它会引发异常
如何确保将所有非数值转换为NAN
有人知道Pandas v0.15或Python 3+中是否也有这种行为吗?我认为没有一种简洁的方法可以做到这一点(也许astype应该有一个force参数?) 在某种情况下,您可以使用:
这是您输入的结果:
In [11]: pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","4"]}).applymap(to_float_or_nan)
Out[11]:
c1 c2
0 1 NaN
1 2 NaN
2 3 4
In [12]: pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","c"]}).applymap(to_float_or_nan)
Out[12]:
c1 c2
0 1 NaN
1 2 NaN
2 3 NaN
设置值不是数字的“nan”
>>> import pandas as pd
>>> df1 = pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","c"]})
>>> df2 = pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","4"]})
>>> M = lambda x: x.isdigit()==True
>>> df1[~df1.applymap(M)]='nan'
>>> df2[~df2.applymap(M)]='nan'
>>> df1
c1 c2
0 1 nan
1 2 nan
2 3 nan
>>> df2
c1 c2
0 1 nan
1 2 nan
2 3 4
希望,这会有所帮助谢谢。objects\u objects行为似乎有问题。您可能需要
M=lambda x:str(x).isdigit()==True
,因为类int
的数值类型不支持操作isdigit()
。
>>> import pandas as pd
>>> df1 = pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","c"]})
>>> df2 = pd.DataFrame({"c1":["1","2","3"], "c2":["a","b","4"]})
>>> M = lambda x: x.isdigit()==True
>>> df1[~df1.applymap(M)]='nan'
>>> df2[~df2.applymap(M)]='nan'
>>> df1
c1 c2
0 1 nan
1 2 nan
2 3 nan
>>> df2
c1 c2
0 1 nan
1 2 nan
2 3 4