Python 熊猫:根据条件检索数据时返回的行不正确
当使用以下代码将列1+列2+列3相加时,我试图检索数据帧中不等于100的行:Python 熊猫:根据条件检索数据时返回的行不正确,python,pandas,dataframe,Python,Pandas,Dataframe,当使用以下代码将列1+列2+列3相加时,我试图检索数据帧中不等于100的行: df.loc[(df["col_1"] + df["col_2"] + df["col_3"]).ne(100)] 但是,当执行代码检索这些行时,当这三列相加时,我得到的行等于100,包括不等于100的行。因此,当这些列相加时,我只在不等于100的行后面 例如,查看下面的示例 当代码被执行时,这就是我得到的。如您所见,第一行加起来是80,第二行加起来是90,
df.loc[(df["col_1"] + df["col_2"] + df["col_3"]).ne(100)]
但是,当执行代码检索这些行时,当这三列相加时,我得到的行等于100,包括不等于100的行。因此,当这些列相加时,我只在不等于100的行后面
例如,查看下面的示例
当代码被执行时,这就是我得到的。如您所见,第一行加起来是80,第二行加起来是90,最后三行加起来是100。因此,最后三行不应该在那里,因为当这三列相加时,我只希望的行不等于100
关于如何实现这一点的任何帮助都将非常有用。也许我使用的代码有问题
谢谢
---------------------------------
ID col_1 col_2 col_3
---------------------------------
1 50 10 20
---------------------------------
2 30 20 40
---------------------------------
3 40 50 10
---------------------------------
4 10 90 0
---------------------------------
5 70 20 10
---------------------------------
让我们将数据加载到一个框架中:
import pandas as pd
# Not the best way, but it's sufficient
df = pd.DataFrame()
df["col_1"] = [50, 10, 40, 10, 70]
df["col_2"] = [10, 20, 50, 90, 20]
df["col_3"] = [20, 40, 10, 0, 10]
# Now retrieve only rows not summing to 100 (NOTE: This is your code)
df.loc[(df["col_1"] + df["col_2"] + df["col_3"]).ne(100)]
输出
上校1
col_2
第3栏
0
50
10
20
1.
10
20
40
我不知道你的问题在哪里。运行您在提供的数据帧上共享的代码行,结果仅返回预期的2行。是的,这是正确的。但是,我只希望输出只返回预期的2行,而不是任何等于100的内容。:)您的代码按预期工作。返回行
ID 1
和ID 2
。它不会返回与示例代码和示例数据相等的行。请使用您为自己提供的数据尝试您的代码。20美元整数是字符串,可通过df.info()
验证。如果“Object”是数据类型,那么您需要使用df[“col_1”]=df[“col_1”]”将列转换为int。astype(int)
并对int列重复。我明白您的意思:我的代码可以工作。但是,当我执行它时,它返回5行,而不是2行!这就是让我困惑的地方。我知道你的输出是正确的。但是,当我自己执行它时,输出包括等于100的值。然后我建议仔细比较版本和您在问题中提供的示例行。您在本地执行的内容和您在这里提供的内容有所不同。我只能根据我掌握的信息提供答案,根据我掌握的信息,您的代码没有问题。好的,谢谢。我正在使用Google Colab。@AnandP2812是您的整数字符串吗?使用df[“col_1”]=df[“col_1”].astype(int)
并对所有int
列执行此操作。您可以使用df.info()
@DavidErickson验证您的数据类型。我更新了支持该案例的答案。如果列都是字符串,那么它们都将返回。我不知道为什么我当初没有考虑这个问题。抢手货