Pandas loc 在使用变量时无法对 DataFrame 进行子集化
Pandas loc does not work to subset DataFrame when using a variable
我是 Python 的新手,尤其是 pandas。我有一个名为 KeyRow 的 DataFrame,它来自更大的 df:
KeyRow=df.loc[df['Order'] == UniqueOrderName[i]]
然后我做一个嵌套循环
for i in range (0,len(PersonNum)):
print(KeyRow.loc[KeyRow['Aisle'] == '6', 'FixedPill'])
所以它似乎只有在放置常量时才起作用,而如果我使用 PersonNum[0] 而不是“6”,即使两个值相等,它似乎也不起作用。当我使用 PersonNum[i] 时,这是我得到的输出:
Series([], Name: FixedPill, dtype: object)
而如果我使用 'x' 我会得到想要的结果:
15 5
Name: FixedPill, dtype: object
有点不清楚你想用这个问题完成什么。如果您要过滤 DataFrame,那么我建议永远不要以迭代方式执行此操作。您应该充分利用 .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]
。您可以通过执行以下操作一步对 DataFrame 进行切片:
df.loc[df["A"].isin(PersonNum), "B"]
return pandas 系列和
df.loc[df["A"].isin(PersonNum), "B"].to_frame()
其中 return 是一个新的 DataFrame。使用 .loc
比迭代方法快得多。
我是 Python 的新手,尤其是 pandas。我有一个名为 KeyRow 的 DataFrame,它来自更大的 df:
KeyRow=df.loc[df['Order'] == UniqueOrderName[i]]
然后我做一个嵌套循环
for i in range (0,len(PersonNum)):
print(KeyRow.loc[KeyRow['Aisle'] == '6', 'FixedPill'])
所以它似乎只有在放置常量时才起作用,而如果我使用 PersonNum[0] 而不是“6”,即使两个值相等,它似乎也不起作用。当我使用 PersonNum[i] 时,这是我得到的输出:
Series([], Name: FixedPill, dtype: object)
而如果我使用 'x' 我会得到想要的结果:
15 5
Name: FixedPill, dtype: object
有点不清楚你想用这个问题完成什么。如果您要过滤 DataFrame,那么我建议永远不要以迭代方式执行此操作。您应该充分利用 .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]
。您可以通过执行以下操作一步对 DataFrame 进行切片:
df.loc[df["A"].isin(PersonNum), "B"]
return pandas 系列和
df.loc[df["A"].isin(PersonNum), "B"].to_frame()
其中 return 是一个新的 DataFrame。使用 .loc
比迭代方法快得多。