округление значений в кадре данных и потеря десятичной точки - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь округлить значения фрейма данных pandas до ближайшего целого числа, чтобы я мог сохранить фрейм данных таким образом, прежде чем потенциально читать / сохранять его в csv. Я не уверен, почему я не могу сопоставить результаты, показанные на веб-сайте панд, для метода .round (). Вот мой код:

import pandas as pd
import numpy as np

x1 = np.random.randn(10)
df1 = pd.DataFrame({'x':x1})

df1

    x
0   0.540351
1   0.205924
2   0.619970
3   0.636680
4   -1.415081
5   0.162028
6   -0.080224
7   -0.022692
8   -0.367687
9   -0.365140

df1.round(0)

    x
0   1.0
1   0.0
2   1.0
3   1.0
4   -1.0
5   0.0
6   0.0
7   0.0
8   0.0
9   0.0

Я хотел бы получить "1" и "0" - это то, что я ожидал бы, основываясь на онлайновых документах - https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.round.html. третий пример, где .round (десятичные дроби) дает "1" и «0» в столбце B, в отличие от 1,0 и 0,0.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете использовать format

df.x.map("{:.0f}".format).astype(int)
Out[471]: 
0    1
1    0
2    1
3    1
4   -1
5    0
6    0
7    0
8    0
9    0
Name: x, dtype: int32
0 голосов
/ 04 июля 2018

pd.Series.round с аргументом 0 выполняет свою работу, округляя до 0 десятичных знаков. Преобразование в целочисленный тип d не ожидается. Чтобы это произошло, вы должны применить преобразование на отдельном шаге:

import pandas as pd
import numpy as np

np.random.seed(0)

x1 = np.random.randn(10)
df1 = pd.DataFrame({'x':x1})

print(df1['x'].round(0).astype(int))

0    2
1    0
2    1
3    2
4    2
5   -1
6    1
7    0
8    0
9    0
Name: x, dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...