Панды применяют десятичные числа в столбце с числами и строками - PullRequest
0 голосов
/ 27 августа 2018

У меня есть столбец, который содержит числа и строки. Например:

Result:
Failed
8.05
9
7

Как изменить данные так, чтобы они отображались с двумя десятичными знаками, то есть следующим образом?

Result:
Failed
8.05
9.00
7.00

Я пробую следующее, но это не работает. Спасибо за вашу помощь!

df['Result'] =  df['Result'].apply('{:.2f}'.format)

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы можете использовать pd.Series.apply с троичным выражением:

s = pd.Series(['Failed', 8.05, 9, 7])

s =  s.apply(lambda x: f'{x:.2f}' if not isinstance(x, str) else x)

print(s)

0    Failed
1      8.05
2      9.00
3      7.00
dtype: object

Обратите внимание, что это не рекомендуемый способ структурирования данных, поскольку вы смешиваете числовые и нечисловые типы. Кроме того, вы храните числовые данные в виде строк, что дорого.

0 голосов
/ 27 августа 2018

Я думаю, нужно создать логическую маску:

#numeric with strings
df = pd.DataFrame({'Result':['Failed',8.05,9,7]})

mask = pd.to_numeric(df['Result'], errors='coerce').notnull()
df.loc[mask, 'Result'] =  df.loc[mask, 'Result'].apply('{:.2f}'.format)
print (df)
0  Failed
1    8.05
2    9.00
3    7.00

Если все строки необходимы, сначала приведите к float s:

df = pd.DataFrame({'Result':['Failed','8.05','9','7']})

mask = pd.to_numeric(df['Result'], errors='coerce').notnull()
df.loc[mask, 'Result'] =  df.loc[mask, 'Result'].astype(float).apply('{:.2f}'.format)
print (df)
   Result
0  Failed
1    8.05
2    9.00
3    7.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...