Python 在数据帧中筛选后删除行
我有一个包含100000行的数据帧(Python 在数据帧中筛选后删除行,python,pandas,Python,Pandas,我有一个包含100000行的数据帧(ratings\u base)。我从中筛选了一行,并使用了下面的代码段 ((ratings\u base.loc[ratings\u base['user\u id']==1])。对值进行排序(按class='rating',升序=0)).iloc[0] 它返回一个系列对象 user_id 1 movie_id 170 rating 5 Name: 19996, dtype: int64 如何从原始数据帧对象中删除此行(系列对
ratings\u base
)。我从中筛选了一行,并使用了下面的代码段
((ratings\u base.loc[ratings\u base['user\u id']==1])。对值进行排序(按class='rating',升序=0)).iloc[0]
它返回一个系列
对象
user_id 1
movie_id 170
rating 5
Name: 19996, dtype: int64
如何从原始数据帧对象中删除此行(系列对象)?我可以使用dataframe的drop函数,但我需要为它创建行索引。如果我可以获得所选行的行索引(我可以看到它显示为Series对象的Name属性),我可以删除它
df.loc[0]
选择第一行。
df.loc[1:][/code>选择第一行之后的所有内容
所以你可以用
ratings_base = ((ratings_base.loc[ratings_base['user_id'] == 1])
.sort_values(by='rating', ascending=0))
ratings_base = ratings_base.iloc[1:]
或者,您可以使用df.drop
:
row = ((ratings_base.loc[ratings_base['user_id'] == 1])
.sort_values(by='rating', ascending=0)).iloc[0]
label = row.name
ratings_base = ratings_base.drop(label)
如果您希望删除不是第一行的行,这可能更灵活
请注意,ratings\u base.drop
将删除索引为label
的所有行。因此,如果索引不是唯一的,则可能会删除多行。首选替代方案,而且它对我也有效。我有一个附带的问题。我必须使用“inplace=True”属性才能将其删除。我检查了len(评级基础)以确认它是否被丢弃。如果没有“inplace=True”属性,我看到的长度是100000,而有了这个道具,长度是99999。原因是什么?当调用df.drop(…,inplace=True)
时,drop
修改df
并返回None
。调用df.drop(…)
时,df
不会被修改,并且drop
返回一个新的数据帧。因此,要更改df
的值,需要使用赋值:df=df.drop(…)
。我更喜欢后者(避免inplace=True
),因为名称inplace
具有误导性——它不是真正的就地操作,因为它不会保存临时内存。有关避免就地的其他原因,请参见。