将浮点数分配给子集将返回1

时间:2018-09-05 19:48:05

标签: python pandas indexing subset slice

我正在尝试将浮点数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 :(得分:2)

您使用loc的方式很奇怪,我不建议将调用链接到ilocloc,而是正确地切片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

答案 1 :(得分:0)

如果您先将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 ...请参阅他关于正确使用lociloc的最佳实践的答案。

答案 2 :(得分:0)

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