Как убрать нули после запятой в определенных столбцах (float64 -> int)?
Мой код:
df_CG1=pd.read_csv('payments_CG1.csv' ,sep=';')
pd.set_option('display.max_rows', None)
df_CG1=df_CG1.dropna(how= 'all')
df_CG1

Подскажите пожалуйста, как столбцам: user_id, revenue, и payment_service_id присвоить "целые" значения, чтобы выглядило красиво.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
df_CG1['user_id'] = df_CG1['user_id'].astype(int)
Остальные столбцы так же.
Автор решения: MaxU
→ Ссылка
Возможно вы получаете тип данных float64, потому, что в некоторых строках у вас встречаются NaN значения, а целые типы в Numpy не понимают NaN и поэтому Pandas автоматически конвертирует такие столбцы в тип данных float64.
В современных версиях Pandas ввели новый тип данных "Int64" (с большой буквы), который понимает значения NaN.
Пример:
In [13]: df = pd.DataFrame([[1, 2, 3], [np.nan, 3, np.nan]], columns=list("abc"))
In [14]: df
Out[14]:
a b c
0 1.0 2 3.0
1 NaN 3 NaN
In [17]: cols = df.columns[df.dtypes.eq("float64")]
In [18]: df[cols] = df[cols].astype(int)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
ValueError: Cannot convert non-finite values (NA or inf) to integer
...
решение:
In [19]: df[cols] = df[cols].astype("Int64")
In [20]: df
Out[20]:
a b c
0 1 2 3
1 <NA> 3 <NA>
In [21]: df.dtypes
Out[21]:
a Int64
b int64
c Int64
dtype: object