Pandas".convert_objects(convert_numeric = True)"已弃用

gui*_*oli 24 python pandas

我的代码中有这一行将数据转换为数字...

data["S1Q2I"] = data["S1Q2I"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)

问题是现在新的pandas发布(0.17.0)说这个函数已被弃用..这是错误:

FutureWarning: convert_objects is deprecated.  
Use the data-type specific converters pd.to_datetime, 
pd.to_timedelta and pd.to_numeric. 
data["S3BD5Q2A"] = data["S3BD5Q2A"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)

所以,我去了新的文档,我找不到任何如何使用新函数转换我的数据的例子......

它只说这个:

"不推荐使用DataFrame.convert_objects,而选择类型特定的函数pd.to_datetime,pd.to_timestamp和pd.to_numeric(0.17.0中的新增功能)(GH11133)."

你能帮忙的话,我会很高兴!

Hoo*_*ked 15

正如@EvanWright在评论中解释的那样,

data['S1Q2I'] = pd.to_numeric(data['S1Q2I'])
Run Code Online (Sandbox Code Playgroud)

现在是转换类型的首选方式.关于变化的详细说明可以在github PR GH11133中找到.


aba*_*ter 6

您可以使用此处完成替换来实现替换.一个例子是:

>>> import pandas as pd
>>> a = pd.DataFrame([{"letter":"a", "number":"1"},{"letter":"b", "number":"2"}])
>>> a.dtypes
letter    object
number    object
dtype: object
>>> b = a.apply(pd.to_numeric, errors="ignore")
>>> b.dtypes
letter    object
number     int64
dtype: object
>>> 
Run Code Online (Sandbox Code Playgroud)

但它有两种方式:

  1. 您必须使用apply而不是非本机数据帧方法
  2. 您必须复制到另一个数据帧 - 无法就地完成.非常适用于"大数据".

我真的不喜欢熊猫的方向.我没有使用过R data.table,但到目前为止它似乎更优越.

我认为具有原生的就地类型转换的数据表对于竞争性数据分析框架来说是非常基础的.


小智 5

这取决于 Pandas 的版本......如果你有 Pandas 的 0.18.0 版本,这种类型将工作......

df['col name'] = df['col name'].apply(pd.to_numeric, errors='coerce') 
Run Code Online (Sandbox Code Playgroud)

另一个版本........

df['col name']=df.col name .astype(float)
Run Code Online (Sandbox Code Playgroud)