将pandas dataframe列转换为数字的更好方法

时间:2017-04-16 21:27:16

标签: python pandas dataframe type-conversion

我有一个数据框,其中包含一些包含object类型数据的列,因为有一些时髦的数据条目(又名a。或whatnot)。

我已经能够通过识别对象列然后执行此操作来纠正此问题:

obj_cols = df.loc[:, df.dtypes == object]
conv_cols = obj_cols.convert_objects(convert_numeric='force')

这很好,允许我运行我需要的回归,但会产生这个错误:

FutureWarning: convert_objects is deprecated.

有没有更好的方法来避免错误?我也试过构建一个lambda函数但是没有用。

2 个答案:

答案 0 :(得分:2)

不推荐使用Convert_objects。请改用它。 您可以添加参数错误='强制'将错误的非数字值转换为NaN。

conv_cols = obj_cols.apply(pd.to_numeric, errors = 'coerce')

该函数将应用于整个DataFrame。可以转换为可以转换为数字类型的列,而不能(例如,它们包含非数字字符串或日期)的列将保持不变。

答案 1 :(得分:0)

如果您有样本数据框:

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 'f', 'Mar': 140},
     {'account': 'Alpha Co',  'Jan': 'e', 'Feb': 210, 'Mar': 215},
     {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 'g' }]
df = pd.DataFrame(sales)

并且您想要删除应该是数字的列中的字符串,您可以使用pd.to_numeric

执行此操作
cols = ['Jan', 'Feb', 'Mar']
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce', axis=1)

您的新数据框将使用NaN代替“古怪”数据框。数据