2017-06-30 13 views
0

私はPython、特にpandasをかなり新しくしています。私は大きなDFからであるKeyRowと呼ばれるデータフレームを持っている:変数のためにPython df.locが動作しない

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]が、これは私が取得しています出力されます使用する場合:事前にすべてのヘルプのための

15 5 
Name: FixedPill, dtype: object 

ありがとう:

Series([], Name: FixedPill, dtype: object) 

を私は 'X' を使用した場合のに対し、私は望ましい結果を得ることができます。

+2

まず、 'rangeEntry(0、len(PersonNum))'は 'int'を返しますが、' '6 ''は文字列なので、おそらく 'TypeError:無効な型の比較 'が表示されます。 –

+0

固定されたもの。 PersonNumを文字列にしました。感謝します! – Questions

答えて

0

この質問であなたが達成しようとしていることは少し不明です。 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 = [1, 2]ある特定のフィールドを検索するために使用したいPersonNumのリストを持っていると仮定します。あなたは実行することにより、ワンステップでデータフレームをスライスすることができます

df.loc[df["A"].isin(PersonNum), "B"] 
パンダシリーズを返します

と新しいデータフレームを返す

df.loc[df["A"].isin(PersonNum), "B"].to_frame() 

を。 .locを利用することは、反復アプローチよりもはるかに速いである。 である。

関連する問題