繁体   English   中英

如果在类型列表的单元格值中找到字符串,如何根据条件删除 pandas dataframe 中的行?

[英]How to delete row in pandas dataframe based on condition if string is found in cell value of type list?

我一直在努力解决以下问题,这些问题实际上听起来很简单,但似乎无法弄清楚,我确信它在堆栈跟踪中非常明显,但我只是愚蠢。

我只是有一个 pandas dataframe 看起来像这样:

数据框

并希望在 jpgs 单元格值(列表)中删除包含值“123.jpg”的行。 所以通常我会得到最终的 dataframe 只有索引 1 和 3 的行。

但是我试了很多方法都没有用。

例如:

df = df["123.jpg" not in df.jpgs]

或者

df = df[df.jpgs.tolist().count("123.jpg") == 0]

给出错误 KeyError: True:

呃

df = df[df['jpgs'].str.contains('123.jpg') == False]

返回一个空的 dataframe:

错误2

df = df[df.jpgs.count("123.jpg") == 0]

df = df.drop(df["123.jpg" in df.jpgs].index)

给出 KeyError: False:

呃

如果需要,这是我的全部代码,如果有人能帮助我回答我做错了什么,我将不胜感激:(。谢谢!!

import pandas as pd

df = pd.DataFrame(columns=["person_id", "jpgs"])

id = 1
pair1 = ["123.jpg", "124.jpg"]
pair2 = ["125.jpg", "300.jpg"]
pair3 = ["500.jpg", "123.jpg"]
pair4 = ["111.jpg", "122.jpg"]
row1 = {'person_id': id, 'jpgs': pair1}
row2 = {'person_id': id, 'jpgs': pair2}
row3 = {'person_id': id, 'jpgs': pair3}
row4 = {'person_id': id, 'jpgs': pair4}

df = df.append(row1, ignore_index=True)
df = df.append(row2, ignore_index=True)
df = df.append(row3, ignore_index=True)
df = df.append(row4, ignore_index=True)
print(df)

#df = df["123.jpg" not in df.jpgs]
#df = df[df['jpgs'].str.contains('123.jpg') == False]

#df = df[df.jpgs.tolist().count("123.jpg") == 0]
df = df.drop(df["123.jpg" in df.jpgs].index)
print("\n Final df")
print(df)

由于您在列表列上进行过滤,因此应用 lambda 可能是最简单的:

df.loc[df.jpgs.apply(lambda x: "123.jpg" not in x)]

对您的尝试的快速评论:

  • df = df.drop(df["123.jpg" in df.jpgs].index)您正在检查列中是否包含确切的值 "123.jpg" ( "123.jpg" in df.jpgs )而不是在任何列表中,这不是您想要的。

  • df = df[df['jpgs'].str.contains('123.jpg') == False]中,方向正确,但您缺少regex=False关键字,如 Ibrahim 的回答所示。

  • df[df.jpgs.count("123.jpg") == 0]在这里也不适用,因为count返回系列中非 NaN 值的总数。

对于str.contains一个,这是如何完成的

df[df.jpgs.str.contains("123.jpg", regex=False)]

你可以试试这个:

mask = df.jpgs.apply(lambda x: '123.jpg' not in x)
df = df[mask]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM