如何基于列的多个值删除行?

2024-10-04 09:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用的数据集在“州”列下包含5个美国领土,我希望删除将这5个领土作为州名称的任何行/记录。我可以基于一个值删除所有记录:

indexNames = df2[df2['state'] == 'District of Columbia'].index
df2.drop(indexNames , inplace=True)

但当我对多个对象执行相同的操作时:

indexNames = df2[(df2['state'] == 'Guam') & (df2['state'] == 'Virgin Islands')].index
df2.drop(indexNames , inplace=True)

没有发生任何变化。不管怎样,我是否可以在第一个语句中列出所有5个并使其工作

编辑:我决定将所有非状态区域重命名为nonstate,然后使用以下代码删除state列中值为nonstate的行

df2['state'] = df2['state'].replace(['District of Columbia','Guam','Mariana 
Islands', 'Puerto Rico', 'Virgin Islands'],'nonstate')

indexNames = df2[df2['state'] == 'nonstate'].index
df2.drop(indexNames , inplace=True)

Tags: oftrueindex记录dropstatedf2district
2条回答

您可以通过过滤掉这些行来“删除”它们:

df = df[(df["state"]!="Guam") & (df["state"]!="Virgin Islands")]

就我个人而言,我可能会使用isin方法和~(NOT)操作符:

exclude = ("Guam", "Virgin Islands", "District of Columbia")
df = df[~(df["state"].isin(exclude))]

这允许您使用序列,这样您就不必在排除的项中硬编码

您是否尝试过df2.loc(indexNames)查看它是否提取您想要的行

例如,make filter(这可以是您的州名称)

filt = (df['lname'] == 'Graham') & (df['fname'] == 'Bob')

然后将过滤器应用于数据框,以提取符合条件的行

df.loc[filt]

希望这能有所帮助

相关问题 更多 >