Невозможно преобразовать pandas dataframe в 2 десятичных знака - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в программировании на Python.В настоящее время я пытаюсь создать график, который может отображать процент в верхней части гистограммы в 2 десятичных разрядах.

df_survey - это фрейм данных, который я сделал с использованием библиотеки панд.(Я пытаюсь скопировать datafame df_survey_sort в df_survey_pct, но когда я внесу изменение в df_survey_pct, df_survey_sort также изменится ... может кто-нибудь объяснить мне, почему это происходит. В результате я делаю следующее, чтобы df_survey_sort и df_survey_pct не перезаписывались)

df_survey = df_survey[['Very interested','Somewhat interested','Not interested']]
df_survey_sort = df_survey.sort_values(by='Very interested', ascending=0)
#df_survey_pct = df_survey_sort
df_survey_pct = df_survey.sort_values(by='Very interested', ascending=0)
total_ds = df_survey_sort.sum(axis=1)

for i in range(0,df_survey_sort.shape[0]):
    df_survey_pct.iloc[i][0] = round(df_survey_sort.iloc[i][0]/total_ds[i]*100,2)
    df_survey_pct.iloc[i][1] = round(df_survey_sort.iloc[i][1]/total_ds[i]*100,2)
    df_survey_pct.iloc[i][2] = round(df_survey_sort.iloc[i][2]/total_ds[i]*100,2)

это тип данных df_survey_pct

Very interested        int64
Somewhat interested    int64
Not interested         int64
dtype: object

, когда я выполняю print(df_survey_pct), значение каждой ячейки не в десятичных разрядах.

Я дажепопробуйте df_survey_pct = df_survey_pct.round(2) и df_survey_pct = df_survey_pct.astype('float'), однако значение по-прежнему целочисленное.

Из-за этого я могу отображать только целочисленный процент в моей гистограмме.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете округлить DataFrame напрямую, используя df.round(2)

0 голосов
/ 25 сентября 2018

Вот как вы конвертируете столбцы np.float64 в 2 десятичных знака

df_survey["some_column_with_too_many_decimal"] = df_survey["some_column_with_too_many_decimal"].apply(lambda x: int(x*100)/100)

Также, чтобы выбрать только определенные строки в этом столбце, если это то, что вам нужно, используйте df.loc вместо iloc накаждая строка, так как у df может быть слишком много строк.

df.loc[(df["column1"]>0), ["column2", "column3"]]

или

df.loc[(df["column1"]>0), "column2", "column3"]

Первый аргумент для loc - это список условий для фильтрации, вторым аргументом являетсястолбцы для выбора, а затем вы можете обновить их, используя команду apply, как показано выше.

Если вы хотите использовать округление, вы можете округлить значения, затем умножить на 100, преобразовать в int и разделить на 100, сделав его десятичным с2 места.Функция округления не ограничивает его двумя десятичными разрядами из-за способа хранения значений в кадре данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...