web-dev-qa-db-ja.com

Python Pandas行を反復処理し、列名にアクセスします

Python Pandasデータフレームの行を反復処理しようとしています。データフレームの各行内で、行に沿った各値を列名で参照しようとしています。

ここに私が持っているものがあります:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.Rand(10,4),columns=list('ABCD'))
print df
          A         B         C         D
0  0.351741  0.186022  0.238705  0.081457
1  0.950817  0.665594  0.671151  0.730102
2  0.727996  0.442725  0.658816  0.003515
3  0.155604  0.567044  0.943466  0.666576
4  0.056922  0.751562  0.135624  0.597252
5  0.577770  0.995546  0.984923  0.123392
6  0.121061  0.490894  0.134702  0.358296
7  0.895856  0.617628  0.722529  0.794110
8  0.611006  0.328815  0.395859  0.507364
9  0.616169  0.527488  0.186614  0.278792

このアプローチ を使用して反復しましたが、ソリューションの一部のみを提供しています-各反復で行を選択した後、どのようにして行要素にアクセスしますか列名?

これが私がやろうとしていることです:

for row in df.iterrows():
    print row.loc[0,'A']
    print row.A
    print row.index()

私の理解では、行はPandas series です。しかし、シリーズにインデックスを付ける方法はありません。

列名を使用して行を繰り返し処理することは可能ですか?

25
edesz

itertuples()も好きです

for row in df.itertuples():
    print(row.A)
    print(row.Index)

行は名前付きタプルであるため、各行の値にアクセスする場合、MUCH高速

スピードラン :

df = pd.DataFrame([x for x in range(1000*1000)], columns=['A'])
st=time.time()
for index, row in df.iterrows():
    row.A
print(time.time()-st)
45.05799984931946

st=time.time()
for row in df.itertuples():
    row.A
print(time.time() - st)
0.48400020599365234
31
Steven G

iterrows()からのアイテムはシリーズではなく、(インデックス、シリーズ)のタプルなので、次のようにforループでタプルをアンパックできます。

for (idx, row) in df.iterrows():
    print(row.loc['A'])
    print(row.A)
    print(row.index)

#0.890618586836
#0.890618586836
#Index(['A', 'B', 'C', 'D'], dtype='object')
18
Psidom
for i in range(1,len(na_rm.columns)):
           print ("column name:", na_rm.columns[i])

出力:

column name: seretide_price
column name: symbicort_mkt_shr
column name: symbicort_price
0
Avik Das