Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python df.loc不适用于变量_Python_Pandas_Dataframe_Loc - Fatal编程技术网

Python df.loc不适用于变量

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

我对Python相当陌生,尤其是熊猫。我有一个名为KeyRow的数据帧,它来自一个更大的df:

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做成了一根绳子。谢谢你!