Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 convert_对象(convert_numeric=True)不为完整系列的非数值生成np.nan_Python_Pandas - Fatal编程技术网

Python convert_对象(convert_numeric=True)不为完整系列的非数值生成np.nan

Python 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

在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_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