#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
версия pandas: 1.2
У меня есть фрейм данных, который содержит столбцы как ‘float64’ с нулевыми значениями, представленными как pd.NAN. Есть ли способ округления без преобразования в строку, а затем в десятичную:
df = pd.DataFrame([(.21, .3212), (.01, .61237), (.66123, .03), (.21, .18),(pd.NA, .18)],
columns=['dogs', 'cats'])
df
dogs cats
0 0.21 0.32120
1 0.01 0.61237
2 0.66123 0.03000
3 0.21 0.18000
4 <NA> 0.18000
Вот что я хотел сделать, но это ошибка:
df['dogs'] = df['dogs'].round(2)
Ошибка типа: аргумент float () должен быть строкой или числом, а не «NAType»
Вот еще один способ, который я пробовал, но он молча терпит неудачу, и преобразование не происходит:
tn.round({'dogs': 1})
dogs cats
0 0.21 0.32120
1 0.01 0.61237
2 0.66123 0.03000
3 0.21 0.18000
4 <NA> 0.18000
Ответ №1:
Хотя это раздражает, панды.NA все еще относительно новый и не поддерживает ВСЕ numpy ufuncs. Как ни странно, я также сталкиваюсь с ошибками при попытке изменить dtype столбца «dogs» из object -> float, что кажется мне ошибкой. Есть несколько альтернатив, с помощью которых вы можете достичь желаемого результата:
- замаскируйте NA и округлите остальную часть столбца
na_mask = df["dogs"].notnull()
df.loc[na_mask, "dogs"] = df.loc[na_mask, "dogs"].astype(float).round(1)
print(df)
dogs cats
0 0.2 0.32120
1 0 0.61237
2 0.7 0.03000
3 0.2 0.18000
4 <NA> 0.18000
- Замените pd.NA с помощью np.nan, а затем round
df = df.replace(pd.NA, np.nan).round({"dogs": 1})
print(df)
dogs cats
0 0.2 0.32120
1 0.0 0.61237
2 0.7 0.03000
3 0.2 0.18000
4 NaN 0.18000
Ответ №2:
df['dogs'] = df['dogs'].apply(lambda x: round(x,2) if str(x) != '<NA>' else x)
Ответ №3:
Работает ли следующий код?
import pandas as pd
import numpy as np
df = pd.DataFrame([(.21, .3212), (.01, .61237), (.66123, .03), (.21, .18), (np.nan, .18)],
columns=['dogs', 'cats'])
df['dogs'] = df['dogs'].round(2)
print(df)
Комментарии:
1. На самом деле это не отвечает на мой вопрос, но предлагает способ изменить данные для работы, не показывая, как изменить данные.