Pandas转换类型并将无效值设为na
有没有办法把 pandas 的系列(Series)里的值转换成特定的类型,并把那些不能转换的元素设置为 n/a 呢?
我发现了一个方法 Series.astype(dtype, copy=True, raise_on_error=True)
,把 raise_on_error=True
设置上可以避免出现错误,但这样并不会把无效的项设置为 na...
更新
更具体来说,我想指定某一列应该转换成什么类型。比如说,如果一个系列包含值 [123, 'abc', '2010-01-01', 1.3]
,我想把它转换成 float
类型,那么我希望得到的结果是 [123.0, nan, nan, 1.3]
。如果选择 datetime
类型,只有 series[2]
会包含一个有效的日期时间值。在我看来,convert_objects
并不允许这种灵活的操作。
2 个回答
这段代码是用来做某些操作的,但具体的功能需要根据上下文来理解。一般来说,代码块里包含了一些指令或者逻辑,用来处理数据或者实现某种功能。
如果你看到类似的代码,通常它们会有变量、函数或者条件判断等元素。变量就像是一个盒子,用来存放信息;函数是一个可以重复使用的代码块,执行特定的任务;而条件判断则是根据不同的情况来决定执行哪段代码。
总之,理解代码的关键在于弄清楚每一部分的作用,以及它们是如何协同工作的。这样,你就能更好地掌握编程的基本概念了。
s.astype(int, raise_on_error=False)
s = s.apply(lambda x: x if type(x)==int else np.nan)
s = s.dropna()
我觉得你可以试试 convert_objects
,可能会更顺利:
In [11]: s = pd.Series(['1', '2', 'a'])
In [12]: s.astype(int, raise_on_error=False) # just returns s
Out[12]:
0 1
1 2
2 a
dtype: object
In [13]: s.convert_objects(convert_numeric=True)
Out[13]:
0 1
1 2
2 NaN
dtype: float64
更新:在最近的pandas版本中,convert_objects
这个方法已经被淘汰了。
现在推荐使用 pd.to_numeric
:
In [21]: pd.to_numeric(s, errors='coerce')
Out[21]:
0 1.0
1 2.0
2 NaN
dtype: float64
这个方法的功能没有 convert_objects
那么强大(后者也可以在数据框上使用),但在这种情况下效果很好,而且更明确。
你可以查看文档中的 对象转换部分,那里提到了其他的 to_*
函数。