我很困惑,因为当我删除一行时,但是在删除它之后我可以继续用df.iloc []来查询该行,但是脚本显示的信息是下一行。
我了解ilow =行索引,但不是,您能向我解释什么错误?
例如:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(low=0, high=6, size=(10,4)),columns ={'a','b','c','d'})
df
a b c d
2 5 0 0
df.loc [df ['c'] == 5] .index
Int64Index([3,8],dtype ='int64')
df.iloc[3]
a 1 11 5例 第5天 名称:3,dtype:int64
df = df.drop(df.loc[df['c']==5].index, axis = 0)
df
a b c d
2 5 0 0
df.iloc [3]
a 4 b 2 c 3 第5天 名称:4,dtype:int64
在这种情况下,我希望有一个例外!
答案 0 :(得分:1)
df.loc返回基于标签(索引,列名)的数据。 iloc仅基于从0开始的位置(索引位置,列位置)返回数据。
您的第一行代码是根据条件创建数据帧的一部分。 df.index返回切片的索引。
df.loc[df['c']==5].index
Int64Index([3, 8], dtype='int64')
第二行,由于只传递了一个值,因此pandas假定它为索引,并返回指定索引处的所有元素。
df.iloc[3]
a 1
b 1
c 5
d 5
一旦删除索引号3,df.iloc [3]将再次返回第4行,因为第4位仍然存在。另一方面,使用loc将引发keyerror,因为数据帧中的数据不再具有索引号3。
df.loc[3]
KeyError: 'the label [3] is not in the [index]'