筛选不在列表中的行

bq9c1y66  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(208)

我有一个df,它有一个城市名称列和一个带有CRASS(整数)列,其中城市列有正确的拼写,但每个都有拼写错误。我创建了每个城市的正确拼写列表,并试图过滤掉拼写错误的行。但到目前为止,我尝试的代码并没有过滤出拼写错误的行。我对如何做到这一点的搜索导致了使用ISIN。

以下是我的城市名单中的一部分:

city_list = [('Aberdeen', 'Ahoskie', 'Alamance', 'Albermarle',...

以下是一些尝试:

df = df[~df['city'].isin(city_list)]
df = df[df['city'].apply(lambda x: tuple([y.lower() for y in x])).isin(city_list)]
df = df[np.isin(df['city'], city_list)]

所以我想把‘Aberdee’去掉,保留‘Aberdeen’作为例子:

city crash_1
915         ABERDEE       1
97         ABERDEEN     587
916         ABSHERS       1
917            ACME       1

非常感谢您的任何帮助。

5kgi1eie

5kgi1eie1#

唯一需要处理的是城市元组的列表。如果您不想保留元组,可以在将字符串大写的同时将其删除。

newlist = [i.upper() for i in city_list[0]]

df[df['city'].isin(newlist)]
qcuzuvrc

qcuzuvrc2#

您只需考虑城市名称的大小写(UPER.LOWER,CAPILIZE):

df = df[df.city.str.capitalize().isin(city_list)]

如果您的列表不是平坦的,并且您实际上有元组列表,则首先按如下方式展开列表:

city_list =[item for t in city_list for item in t]

相关问题