Как преобразовать тип объекта в целочисленный тип с помощью ValueError: недопустимый литерал для int () с базой 10: '2,156,624,900'? - PullRequest
0 голосов
/ 13 июля 2020

Я работаю с набором данных о самоубийствах, часть которого включает столбец gdp_for_year. Однако столбец имеет тип object и, естественно, должен быть int. Я получаю следующую ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-10-ec740fbd9849> in <module>
      2 suicides.info()
      3 
----> 4 suicides['gdp_for_year'] = suicides['gdp_for_year'].astype('int')

~\anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)
   5696         else:
   5697             # else, only a single dtype is given
-> 5698             new_data = self._data.astype(dtype=dtype, copy=copy, errors=errors)
   5699             return self._constructor(new_data).__finalize__(self)
   5700 

~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)
    580 
    581     def astype(self, dtype, copy: bool = False, errors: str = "raise"):
--> 582         return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
    583 
    584     def convert(self, **kwargs):

~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, filter, **kwargs)
    440                 applied = b.apply(f, **kwargs)
    441             else:
--> 442                 applied = getattr(b, f)(**kwargs)
    443             result_blocks = _extend_blocks(applied, result_blocks)
    444 

~\anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)
    623             vals1d = values.ravel()
    624             try:
--> 625                 values = astype_nansafe(vals1d, dtype, copy=True)
    626             except (ValueError, TypeError):
    627                 # e.g. astype_nansafe can fail on object-dtype of strings

~\anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
    872         # work around NumPy brokenness, #1987
    873         if np.issubdtype(dtype.type, np.integer):
--> 874             return lib.astype_intsafe(arr.ravel(), dtype).reshape(arr.shape)
    875 
    876         # if we have a datetime/timedelta array of objects

pandas\_libs\lib.pyx in pandas._libs.lib.astype_intsafe()

**ValueError: invalid literal for int() with base 10: '2,156,624,900'**

Dataframe info () и head ()

Есть ли у кого-нибудь предложения по поводу того, что я могу сделать?

1 Ответ

0 голосов
/ 13 июля 2020

Ваша строка

'2,156,624,900'

содержит запятые. Вы не можете автоматически преобразовать эту строку в целое число. Сначала вам нужно удалить запятую. Вы можете сделать это следующим образом:

int('2,156,624,900'.replace(',', ''))

Итак, в вашем случае вы либо захотите воспользоваться некоторыми из более сложных настроек локали, указанными в комментарии под вашим сообщением, либо примените эту replace функцию к сначала весь столбец, а затем преобразовать его в int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...