Назначение числа с плавающей точкой возвращает 1 - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь присвоить плавающему элементу 0.3 подмножеству в пандах, но результат возвращает значение 1. Но если я назначу целое число, например 12, оно вернет 12.

df = pd.DataFrame({
    'A': ['A','B','C','D'],
    'Val1': [1,2,3,4],
    'Val2': [5,6,7,8]
})

df.set_index('A', inplace=True)
df.loc[:'D', 'Val1'].iloc[:-1] = 0.3 // returns 1 instead of 0.3

Ответы [ 3 ]

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

То, как вы используете loc, странно, я бы не рекомендовал связывать вызовы с iloc и loc, вместо этого правильно разделить DataFrame:

df.loc[:-1, 'Val1'] = 0.3

   Val1  Val2
A
A   0.3     5
B   0.3     6
C   0.3     7
D   4.0     8

Или явно:

df.loc['A':'C', 'Val1'] = 0.3
0 голосов
/ 05 сентября 2018

loc

df.loc[df.index[:-1], 'Val1'] = .3
df

   Val1  Val2
A            
A   0.3     5
B   0.3     6
C   0.3     7
D   4.0     8

iloc

df.iloc[:-1, df.columns.get_loc('Val1')] = .4
df

   Val1  Val2
A            
A   0.4     5
B   0.4     6
C   0.4     7
D   4.0     8
0 голосов
/ 05 сентября 2018

Работает, если вы разыгрываете Val1 для типа с плавающей запятой:

df.Val1 = df.Val1.astype(float)

Полный пример:

df.set_index('A', inplace=True)
df.Val1 = df.Val1.astype(float)
df.loc[:'D', 'Val1'].iloc[:-1] = 0.3 
print(df)

[выход]

   Val1  Val2
A            
A   0.3     5
B   0.3     6
C   0.3     7
D   4.0     8

Однако я должен согласиться с @ user3483203 ... См. Его ответ о наилучшей практике для правильного использования loc и iloc.

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