首页 > 解决方案 > 使用 astype 更改 pandas 中的数据类型时出错

问题描述

我在这里发现了一个类似的问题,但该解决方案对我不起作用。有人可以帮我理解我做错了什么吗?

>>> df.dtypes

Name       object
Country    object
Product    object
Price      object
dtype: object

>>> df['Price'] = df['Price'].astype(str).astype(int)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 5815, in astype
    ```new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\internals\managers.py", line 418, in astype
    return ```self.apply("astype", dtype=dtype, copy=copy, errors=errors)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\internals\managers.py", line 327, in apply
    ```applied = getattr(b, f)(**kwargs)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\internals\blocks.py", line 592, in astype
    ```new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\dtypes\cast.py", line 1309, in astype_array_safe
    ```new_values = astype_array(values, dtype, copy=copy)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\dtypes\cast.py", line 1257, in astype_array
    ```values = astype_nansafe(values, dtype, copy=copy)```
  File "C:\Users\smuf2\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\dtypes\cast.py", line 1174, in astype_nansafe
    return ```lib.astype_intsafe(arr, dtype)```
  File "pandas\_libs\lib.pyx", line 679, in pandas._libs.lib.astype_intsafe
ValueError: invalid literal for int() with base 10: '1,200'

我是 python 新手,不知道这意味着什么。非常感谢一些帮助。

标签: pythonpandasdataframe

解决方案


您的列包含带有,数字分组符号的字符串。您可以将其替换为空(去掉它)或下划线:

df['Price'].str.replace(',', '').astype(int)

推荐阅读