【问题标题】:Better way to convert pandas dataframe columns to numeric将熊猫数据框列转换为数字的更好方法
【发布时间】:2017-09-12 12:45:27
【问题描述】:

我有一个数据框,其中一些列包含对象类型的数据,因为有一些时髦的数据条目(又名 . 或诸如此类)。

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

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

这工作正常,允许我运行我需要的回归,但会产生这个错误:

FutureWarning: convert_objects is deprecated.

有没有更好的方法来避免错误?我也尝试构建一个 lambda 函数,但没有成功。

【问题讨论】:

  • 你可以使用 astype(int) 或 pd.to_numeric

标签: python pandas dataframe type-conversion


【解决方案1】:

Convert_objects 已弃用。改用这个。 您可以添加参数 errors='coerce' 将错误的非数值转换为 NaN。

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

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

【讨论】:

  • 这给了我:Value Error: ('Unable to parse string "." at position...)
  • 我之前尝试过。我得到TypeError: arg must be a list, tuple, 1-d array, or Series
  • 因为 obj_cols 是一个数据框
  • apply 的答案应该与参数 errors = 'coerce' 一起使用
  • 我相信 errors = 'coerce' 将所有非数字字符串转换为 NaN ,所以它应该是 errors='ignore'
【解决方案2】:

如果您有示例数据框:

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 代替“古怪”数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2017-12-12
    • 2018-11-25
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2016-01-19
    • 2021-12-18
    相关资源
    最近更新 更多