问题引入
python中,我想通过pandas库的sort_values()排序后,通过iloc取b的第一个值。结果遇到
ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types
df=pd.DataFrame({"a":[1,2,3,4,5],"b":[5,4,3,2,1]})
df
Out[1]:
a b
0 1 5
1 2 4
2 3 3
3 4 2
4 5 1
排序方式通过:df.sort_values(by='b')
#排序后需要重置索引
不然会导致数据读取数据的时候没有改变,只是从可视化上改变了
df=df.reset_index()
df=df.sort_values(by='b')
df=df.reset_index()
df
Out[2]:
index a b
0 4 5 1
1 3 4 2
2 2 3 3
3 1 2 4
4 0 1 5
在使用pandas中的iloc模块,输入以下代码时报错
df.iloc[0,'b'] #错误示范
↑↑↑↑↑↑↑↑↑↑↑↑↑错误示范↑↑↑↑↑↑↑↑↑↑↑↑↑!!!!!
原因是:iloc和loc代码混淆,iloc中必须是整数
例如这里 应该使用df.loc[0,'b'] 而不是df.iloc[0,'b']
df.loc[0,'b']
Out[3]: 1
或者可以使用df.iloc[0,:]['b]来获取b的第一个值
df.iloc[0,:]['b']
Out[4]: 1
总结:
loc函数:通过行索引 "Index" 中的具体值来取行数据,df.loc[0,'a']获取a列中的第一个数据。
iloc函数:通过行号来取行数据,如df.iloc[0,0]获取第一行第一列的数据。