#python #pandas #numpy #python-2.7
Вопрос:
Пытаюсь преобразовать столбец объектов в int, но продолжаю получать сообщения об ошибках.
dataTypeSeries = mj.dtypes print(dataTypeSeries)
Тип данных каждого столбца фрейма данных :
Region object Ad_Impressions object Clicks float64 dtype: object
mj["Clicks"] = mj.Clicks.astype(int) print(dataTypeSeries) #Converting the click data
Region object Ad_Impressions object Clicks int64 dtype: object
Никаких проблем там нет
mj['Ad_Impressions'].astype(str).astype(int) #Try the same with impressions, get this error
ValueError Traceback (most recent call last) /var/folders/ky/2j2r1h6d75qf92ks05h9p9180000gn/T/ipykernel_28774/1132458541.py in lt;modulegt; ----gt; 1 mj['Ad_Impressions'].astype(str).astype(int) /opt/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py in astype(self, dtype, copy, errors) 5813 else: 5814 # else, only a single dtype is given -gt; 5815 new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors) 5816 return self._constructor(new_data).__finalize__(self, method="astype") 5817 /opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/managers.py in astype(self, dtype, copy, errors) 416 417 def astype(self: T, dtype, copy: bool = False, errors: str = "raise") -gt; T: --gt; 418 return self.apply("astype", dtype=dtype, copy=copy, errors=errors) 419 420 def convert( /opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/managers.py in apply(self, f, align_keys, ignore_failures, **kwargs) 325 applied = b.apply(f, **kwargs) 326 else: --gt; 327 applied = getattr(b, f)(**kwargs) 328 except (TypeError, NotImplementedError): 329 if not ignore_failures: /opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/blocks.py in astype(self, dtype, copy, errors) 589 values = self.values 590 --gt; 591 new_values = astype_array_safe(values, dtype, copy=copy, errors=errors) 592 593 new_values = maybe_coerce_values(new_values) /opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py in astype_array_safe(values, dtype, copy, errors) 1307 1308 try: -gt; 1309 new_values = astype_array(values, dtype, copy=copy) 1310 except (ValueError, TypeError): 1311 # e.g. astype_nansafe can fail on object-dtype of strings /opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py in astype_array(values, dtype, copy) 1255 1256 else: -gt; 1257 values = astype_nansafe(values, dtype, copy=copy) 1258 1259 # in pandas we don't store numpy str dtypes, so convert to object /opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py in astype_nansafe(arr, dtype, copy, skipna) 1172 # work around NumPy brokenness, #1987 1173 if np.issubdtype(dtype.type, np.integer): -gt; 1174 return lib.astype_intsafe(arr, dtype) 1175 1176 # if we have a datetime/timedelta array of objects /opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/lib.pyx in pandas._libs.lib.astype_intsafe() ValueError: invalid literal for int() with base 10: '104.559'
Комментарии:
1.
'104.559'
представляет собой строку с плавающей точкой.2. Ошибка уже говорит об этом: ваши данные имеют
104.559
то, что не может быть истолковано какint
.3. В чем здесь вопрос? Конечно, строка
'104.559'
не может быть проанализирована как целое число4. Как я могу сделать это int ?
5. Сделайте
mj['Ad_Impressions'].astype(float).astype(int)
это , но будьте осторожны, что это сократит все ваши поплавки (т. Е. «9.99» станет 9, а не 10). Если вы хотите округлить до ближайшего целого числа, выполните:mj['Ad_Impressions'] = mj['Ad_Impressions'].map(lambda x: int(round(float(x))))