将大熊猫数据框列转换为数字的更好方法
问题描述:
由于一些时髦的数据条目(又名a或whatnot),我有一个数据框,其中包含一些包含对象类型数据的列。将大熊猫数据框列转换为数字的更好方法
我已经能够通过识别对象列,然后做更正此此:
obj_cols = df.loc[:, df.dtypes == object]
conv_cols = obj_cols.convert_objects(convert_numeric='force')
这工作得很好,让我跑,我需要回归,但生成该错误:
FutureWarning: convert_objects is deprecated.
有没有更好的方法来做到这一点,以避免错误?我也尝试构建一个lambda函数,但没有奏效。
答
Convert_objects已弃用。改用它。 您可以添加参数errors ='coerce'来将错误的非数值转换为NaN。
conv_cols = obj_cols.apply(pd.to_numeric, errors = 'coerce')
该函数将应用于整个DataFrame。可以转换为数字类型的列将被转换,而不能(例如,它们包含非数字字符串或日期)的列将被单独保留。
答
如果你有一个简单的数据帧:
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来代替“古怪”数据
您可以使用astype(int)或pd.to_numeric – Vaishali