Python df.loc不适用于变量
我对Python相当陌生,尤其是熊猫。我有一个名为KeyRow的数据帧,它来自一个更大的df:Python df.loc不适用于变量,python,pandas,dataframe,loc,Python,Pandas,Dataframe,Loc,我对Python相当陌生,尤其是熊猫。我有一个名为KeyRow的数据帧,它来自一个更大的df: KeyRow=df.loc[df['Order'] == UniqueOrderName[i]] 然后我做一个嵌套循环 范围(0,len(PersonNum))中的i的: 打印(KeyRow.loc[KeyRow['roach']='6','FixedPill']) 因此,它似乎只在放置常量时起作用,而如果我使用PersonNum[0]而不是“6”,即使这两个值相等,它似乎也不起作用。当我使用Per
KeyRow=df.loc[df['Order'] == UniqueOrderName[i]]
然后我做一个嵌套循环
范围(0,len(PersonNum))中的i的:
打印(KeyRow.loc[KeyRow['roach']='6','FixedPill'])
因此,它似乎只在放置常量时起作用,而如果我使用PersonNum[0]而不是“6”,即使这两个值相等,它似乎也不起作用。当我使用PersonNum[I]时,这是我得到的输出:
Series([], Name: FixedPill, dtype: object)
然而,如果我使用“x”,我会得到期望的结果:
15 5
Name: FixedPill, dtype: object
提前感谢您的帮助。现在还不清楚您想通过这些问题实现什么目的。如果您希望过滤数据帧,那么我建议永远不要以迭代的方式进行过滤。您应该充分利用
.loc
的切片功能。考虑这个例子:
df = pd.DataFrame([[1,2,3], [4,5,6],
[1,2,3], [2,5,6],
[1,2,3], [4,5,6],
[1,2,3], [4,5,6]],
columns=["A", "B", "C"])
df.head()
A B C
0 1 2 3
1 4 5 6
2 1 2 3
3 2 5 6
4 1 2 3
假设您有一个PersonNum列表,您想使用它来定位特定字段,其中您的列表是PersonNum=[1,2]
。通过执行以下操作,可以一步分割数据帧:
df.loc[df["A"].isin(PersonNum), "B"]
这将返回熊猫系列和
df.loc[df["A"].isin(PersonNum), "B"].to_frame()
返回一个新的数据帧。使用
.loc
比迭代方法要快得多。不太清楚你想用这个问题完成什么。如果您希望过滤数据帧,那么我建议永远不要以迭代的方式进行过滤。您应该充分利用.loc
的切片功能。考虑这个例子:
df = pd.DataFrame([[1,2,3], [4,5,6],
[1,2,3], [2,5,6],
[1,2,3], [4,5,6],
[1,2,3], [4,5,6]],
columns=["A", "B", "C"])
df.head()
A B C
0 1 2 3
1 4 5 6
2 1 2 3
3 2 5 6
4 1 2 3
假设您有一个PersonNum列表,您想使用它来定位特定字段,其中您的列表是PersonNum=[1,2]
。通过执行以下操作,可以一步分割数据帧:
df.loc[df["A"].isin(PersonNum), "B"]
这将返回熊猫系列和
df.loc[df["A"].isin(PersonNum), "B"].to_frame()
返回一个新的数据帧。使用
.loc
比迭代方法快得多。首先,范围(0,len(PersonNum))
返回int
,而'6'
是一个字符串,因此您可能会看到类型错误:无效的类型比较
。这解决了问题。我把PersonNum做成了一根绳子。谢谢你!对于初学者来说,range(0,len(PersonNum))
正在返回int
,而'6'
是一个字符串,因此您可能会看到TypeError:invalid type comparison
。这解决了问题。我把PersonNum做成了一根绳子。谢谢你!