gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:02:07 26 4
gpt4 key购买 nike

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

我只是有一个看起来像这样的 pandas 数据框:

dataframe

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

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

例如:

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

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

报错KeyError: True:

err

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

返回一个空数据框:

err2

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

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

给出 KeyError: False:

err

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

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”列(df.jpgs 中的“123.jpg”)而不是任何列表,这不是您想要的。

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

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

关于python - 如果在类型列表的单元格值中找到字符串,如何根据条件删除 pandas 数据框中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71903471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com