将对象类型转换为 int 时出现问题

Issue while converting object type to int

我有一个冗长的 python 代码,其中我使用以下方法将一些列的数据类型从对象更改为 int 或 float

df['a'] = df['a'].astype('int')
df['b'] = df['b'].astype('int')

但是我在转换后出现以下错误

int() argument must be a string, a bytes-like object or a number, not 'method'

有没有人遇到过这个错误??请帮忙

您收到该错误是因为该列中至少有一个 python method 对象。很可能整个专栏都充满了一种方法。现在我不得不推测,因为你没有给我们足够的信息,但如果你误用了 ufunc 而忽略了调用它,这很容易意外地做到这一点。

>>> df = pd.DataFrame([[1],[-2],[3]], columns=['a'])
>>> df['a'] = df['a'].abs    # BUG: Fills column with `method` object
>>> df['a'] = df['a'].astype('int')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/pandas/core/generic.py", line 5881, in astype
    new_data = self._data.astype(
  File "/usr/lib/python3/dist-packages/pandas/core/internals/managers.py", line 581, in astype
    return self.apply("astype", dtype=dtype, **kwargs)
  File "/usr/lib/python3/dist-packages/pandas/core/internals/managers.py", line 438, in apply
    applied = getattr(b, f)(**kwargs)
  File "/usr/lib/python3/dist-packages/pandas/core/internals/blocks.py", line 559, in astype
    return self._astype(dtype, copy=copy, errors=errors, values=values, **kwargs)
  File "/usr/lib/python3/dist-packages/pandas/core/internals/blocks.py", line 643, in _astype
    values = astype_nansafe(vals1d, dtype, copy=True, **kwargs)
  File "/usr/lib/python3/dist-packages/pandas/core/dtypes/cast.py", line 711, in astype_nansafe
    return lib.astype_intsafe(arr.ravel(), dtype).reshape(arr.shape)
  File "pandas/_libs/lib.pyx", line 547, in pandas._libs.lib.astype_intsafe
TypeError: int() argument must be a string, a bytes-like object or a number, not 'method'

您需要查看您对该列所做的最后一件事,看看它是否不小心用方法对象填充了该列。如果是这样,请添加那些牛仔腿 ().

df['a'] = df['a'].abs()