我正在尝试将浮点数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
答案 0 :(得分:2)
您使用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
答案 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 ...请参阅他关于正确使用loc
和iloc
的最佳实践的答案。
答案 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