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 比迭代方法快得多